nemůžu odolat a trosku si taky zaflejmuju tady :)
1)Pokud chcete dělat nízkoůrovňové optimalizace tohoto typu nebude php zrovna vhodné. (asi jako vodní dělo na zalití malého květináče). Skuste C/C++ či asembler tam jsou takovéto optimalizace jednodušeji realizovatelné, používají se a někdy mají i smysl.
2)String je obecně entita která umožňuje udržovat a pracovat s krátkýmy i dlóóouhými řetězcy znaků které nejde je ve "Stroji" vyjádřit a zpracovávat jako jedno jediné číslo. Jak už někdo psal tak do největšího registru ,čísla s kterým umí stroj pracovat (64bitů), se vejde jen pár znaků. 2..8 podle použitého kódování. Proto se s Stringem ve stroji pracuje jako s polem hodnot/bajtů nikoliv jako s jedním číslem. Jinak řečeno "Stroj" není ideální matematický aparát ale má konkrétní možnosti a omezení. Takže například neumí přímo počítat(+,-,*,/,...) s tisícibitovými hodnotami. To už je pak zálečitostí různých chytrých algoritmů který takový výpočet provádějí po částech, v extrémním případě jako je tento si představte funkci substr.
3)Doporučuji rozšířit repertoár matematických operací o bitové AND,OR,XOR,LSHIFT,RSHIFT. Pro Stroj jsou většinou výrazně efektivnější a pro člověka je to mnohem pochopitelnější. Také pro zápis dloouhých čísel se často používá hexadecimální soustava. Obzvlášť ve spojení s funkcemi výše se pak dají dělat jednoduše různá kouzla.
Nadruhou stranu než dělat čtyři matematické operace nad číslem, je pro Stroj mnohdy jednoduší a rychlejší přistoupit k části toho čísla jako k 8bitové/1bajtové hodnotě (v RAM jsou čísla uložena,a jdou adresovat, po jednotlivých byte) a udělat jednu jednoduchou operaci (jako například při změně hoj na doj) stačí odečíst od první byte řetězce číslo 4.
4)Jednoduchost matematických operací je možná jen pokud je string jednoduše vyjádřen vnějakém pevném kódování 1znak=Nbyte nebo obecně Nbit kde N je konstanta např ASCII/UTF32. Zkuste kouknout na UTF8 kde jsou znaky v řetězci(Stringu) vyjádřovány různým počtem bitů/bajtů.
Třeba mne ale jako nematematika překvapíte.