Delenie nulou
Ak matematik alebo informatik uvidí titulok v časopise [1]:
„1200 let stará otázka vyřešena! Nulou lze dělit!“, tak ho to, prirodzene, zaujme.
Na navodenie atmosféry použijeme záverečné citácie v článku s výrokmi jedného z autorov nových (nie úplne) ideí Jamesa Andersona:
Když mně bude někdo spochybňovat, můžu ho praštit po hlavě počítačem, který to dovede... Jsem připraven vstoupit do matematické arény a obhájit to tam... Když učiníte posun v přístupu a přijměte, že 0/0 je fixní číslo, pak jsou možné zcela nové rovnice...
Článok je písaný v populárnom štýle pre širšie vrstvy čitateľov, takže na ilustráciu:
... počítače prostě nulou dělit nedokážou. Zkuste to na své kalkulačce.
... je zapnutý autopilot. Pokud váš koordinátor vydělí nulou, jste mrtví.

Chvíľu trvá, kým sa dospeje k dvom najdôležitejším bodom a tým sa to vlastne končí.
Prvým podstatným bodom je definovanie pojmu nulita ako nového čísla, predbežne reprezentovaného výrazom 0/0 (v ďalšom texte je označené ako Φ). Zoberme ho zatiaľ jednoducho ako nulu delenú nulou a toto číslo Φ bude rovnocenné všetkým ostatným číslam.
Obsahom druhého bodu je, že medzi čísla sú zaradené aj čísla plus nekonečno (∞), mínus nekonečno (-∞), bez ďalšieho vysvetlenia. Napriek tomu je to informácia, ktorá problematiku v značnej miere matematicky spriehľadňuje.
Spomeňme si na posledný ročník strednej, resp. na prvé ročníky vysokej školy (nehumanitného smeru). Iste sme sa stretli s pojmom limita a prípad, keď v menovateli nejakého výrazu sa hodnota limitne blížila k nule, sa často preberal. Ak ju vieme spočítať, máme tieto možnosti:
Pre hodnotu v čitateli, ktorá sa limitne blíži ku konkrétnemu kladnému alebo zápornému číslu, je výsledok „po delení nulou“ buď ∞, alebo -∞.
Ak hodnota čitateľa je limitne nula, výsledkom môže byť čokoľvek, dokonca aj ∞ alebo -∞.
A tu je presne priestor na nulitu, teda riešenie situácie typu 0/0.
Z už uvedených informácií sa dá čakať, že všetky aritmetické operácie môžu byť s novými číslami dobre definované. V takejto dobre vymedzenej aritmetike by nedochádzalo k problémom s nedefinovanými hodnotami, následne aj v praktickom použití napr. v počítačoch.
V článku síce internetový odkaz nie je, ale cez použité mená a britské univerzitné servery nie je problém sa dopracovať k
zdrojom [2], ktoré sú podkladom pre definície, tvrdenia a úvahy v nasledujúcej časti.
Nulita, číselná os a základné vzťahy
Ak množinu reálnych čísel obohatíme o nové hodnoty Φ, ∞, -∞, nazývame čísla z tejto obohatenej množiny transreálne (transreal, analogicky v anglickej terminológii transrational pre racionálne a transinteger pre celé).
V ďalšom texte budeme jednoducho hovoriť o číslach aj pre Φ, ∞, -∞.
Čísla ∞, -∞ vieme vo vzťahu k číselnej osi umiestniť vpravo a vľavo tak, že všetky bežné čísla sú v usporiadaní medzi týmito hraničnými hodnotami. Pre nulitu tam miesto nemáme. Dokonca vo všeobecnosti platí, že ak sa hodnota Φ vyskytuje v nejakej podmienke, podmienka neplatí okrem pravdivého prípadu rovnosti (napr. výraz x=Φ, ak hodnota premennej x je Φ). Názornú predstavu umiestnenia všetkých čísel predstavuje schéma, v ktorej číslo Φ je mimo lineárneho usporiadania ostatných čísel:
Pre každé číslo x platí práve jedna zo štyroch možností:
x < 0 x > 0 x = 0 x = Φ
Detailné axiomatické pomerne rozsiahle vymedzenie aritmetiky je nad rámec príspevku.
Podstatný záver je ten, že platí:
Všetky bežné čísla vieme skonštruovať z troch základných čísel -1, 0, 1 a vidíme, že to platí aj pre tri novo zavedené.
Len pre zaujímavosť, okrem prirodzene očakávaných tvrdení, napr.:
sú aj niektoré menej zrejmé:
Porovnania
majú pre každé x hodnotu nepravda.
Z vlastností Φ v porovnávacích podmienkach a správania sa v aritmetických výrazoch vyplýva, že v čistej podobe je tu presná analógia s hodnotou NULL z databázových jazykov.
Architektúra počítača
Je to pomerne rozsiahla a otvorená téma. Na tomto mieste nie je cieľom opísať podrobnosti architektúry z hardvérového hľadiska, i keď, samozrejme, táto oblasť má svoje opodstatnenie.
Minimálne tieto praktické dôsledky majú veľký význam:
1. Na úrovni softvéru a hardvéru sa odbúrajú všetky výnimočné stavy a zastavenia v dôsledku aplikácie aritmetickej operácie.
2. Samotný procesor môže byť oveľa jednoduchší.
Úvahy o bitovej reprezentácii nových čísel však môžu byť zaujímavé. Čísla 0 (všetky bity 0), -1 (všetky bity 1), 1 (posledný bit 1 ostatné bity 0) so svojou bitovou reprezentáciou v počítači sú známe. Výnimočná je i reprezentácia s prvým bitom 1 a ostatnými s hodnotou 0, určená zvyčajne pre najmenšie záporné číslo. To by mohla byť alternatíva pre Φ. Ale čo s ∞ a -∞, obetujú sa nejaké dve bitové kombinácie? Núka sa i riešenie s dodatočným bitom, napr. pre čísla 0, 1, -1.
Ako to je, resp. bude v skutočnosti, to závisí od tvorcov konkrétnej architektúry a určite to prešlo, resp. prejde nejakými etapami štandardizácie.
Programovanie
Bitová reprezentácia v konečnom dôsledku nemusí byť dôležitá pre syntax programovacích jazykov. Vystačíme asi s tromi novými konštantami.
Simulovanie novej aritmetiky v terajších jazykoch naprogramovaním novej triedy (možno už existuje) nie je problém, tak ako nebol problém simulovať hodnotu NULL. Určite je však rozdiel v efektívnosti, čitateľnosti a vyjadrovacích možnostiach, ak daná aritmetika je realizovaná priamo inštrukciami počítača a nie je potrebné príslušné ošetrenie výnimiek (exception handling).
Nové čísla môžu zmeniť aj prístup k zaužívaným spôsobom programovania a, samozrejme, aj k programovacím jazykom a metodológii programovania.
Je tu určite široký priestor na rozličné úvahy. Len ilustratívne spomenieme oblasti práce s intervalmi a inicializáciou.
Operácie s intervalmi môžu rovno používať v premenných hodnotu ∞ a rôzne konštrukcie často používané hlavne v databázach zjednodušiť a spriehľadniť.
Predpokladajme napríklad, že položka max určuje horné ohraničenie a môže nadobúdať konkrétnu hodnotu alebo NULL na vyjadrenie toho, že testovanie hodnoty zhora neohraničujeme. Na kontrolu, či nejaká premenná x je hodnotou max ohraničená, bol potrebný výraz:
stačí však uvažovať pre max namiesto NULL alternatívu ∞ a potom je prirodzené a jednoduché:
Dokonca je to v poriadku aj pre x = Φ, čiže podmienka je v tomto prípade nepravdivá, čo asi chceme. Napríklad ak v podmienke cyklu máme výraz x < ∞, nemusí to byť nekonečný cyklus.
Pri použití premennej, aj keď sa spoľahneme na to, že kompilátor zabezpečí inicializáciu priestoru premenných zvyčajne na nuly, nevieme rozlíšiť, či máme v premennej v danom momente hodnotu z inicializácie alebo výsledok nejakej operácie.
Ak urobíme inicializáciu na hodnoty Φ (s významom nedefinovaná hodnota), takisto to síce nevieme rozlíšiť, ale z logického hľadiska sme bližšie k realite. Explicitný príkaz, ktorý spôsobí naplnenie hodnotou Φ, bude asi len s významom: inicializácia nedefinovanou hodnotou. Takže ak má premenná túto hodnotu, buď pôjde o výsledok „zlej“ operácie, napr. delenia nulou, alebo o prípad nenaplnenej premennej. To má pri použití v programe podobné dôsledky. Teda to, že pracujeme s nedefinovanou hodnotou.
Zamyslenie na záver
Skupina okolo Jamesa Andersona zašla na teoretickej úrovni oveľa ďalej, zjednodušene povedané, nové rozšírenie aritmetiky považuje za dobré aj pre všetky oblasti matematiky, kde sa pracuje s číslami.
Zdá sa, že vo väčšine oblastí je to tak, ale možno v nejakých veľmi špeciálnych sú nejasnosti. Preto je skepticizmus na strane matematikov ako predstaviteľov exaktnej vedy pochopiteľný.
Ťažko povedať, či a ako to môže ovplyvniť terajšiu teóriu. Oblasti, v ktorých sa pohybuje informatika, sú skôr konečného charakteru a použité objekty a konštrukcie sú obsiahnuté v nejakom spočítateľnom priestore.
Ak spresnenia na matematickej úrovni v špeciálnych oblastiach povedú napr. k inému všeobecnejšiemu axiomatickému vymedzeniu, ale terajší rozsah a obsah rozšírenej aritmetiky sa nezmení alebo bude konzistentne obsiahnutý v nejakom podobnom rozumnom celku, to informatikom a tvorcom počítačov prekážať asi nebude.
Z histórie vieme, že zavedenie čísla 0 trvalo veľmi dlho, takže uvidíme, ako to bude s nulitou. Treba však jasne povedať, že aj nekonečno sa tým prenesie z čisto matematicko-teoretickej roviny do sveta bežných čísel.
Počítač ľubovoľne veľký (ale konečný) v zmysle objemu pamäte (internej či externej, dokonca i celý internet) a dĺžky slova (pamäťovej bunky) môže pracovať v konečnom čase len s konečným počtom čísel (celých, racionálnych, resp. objektov z inej spočítateľnej usporiadanej množiny, napr. reťazce a dátumy). Je určite prínosom mať v architektúre počítačov prvky reprezentujúce nekonečno a nedefinované (nenaplnené, NULL...) hodnoty s úplnou aritmetikou. Aj keby to bolo len na zvýšenie zrozumiteľnosti a vyjadrovacích možností v programovacích jazykoch. Ako už bolo naznačené, nie je to zďaleka všetko.
Zatiaľ to vyzerá ako prechádzka ružovým sadom, ale pre pozorného čitateľa jedna otázka:
Čo sa stane, ak k číslu, ktorého bitová reprezentácie určuje najväčšie číslo v počítači, pripočítame 1? Možné riešenie a praktická realizácia sa ponúka, stačí uvažovať hodnotu Φ.
Pôvodná teoretická rovina tým však dostala vážne trhliny. Či chceme alebo nie, s konečnosťou na úrovni programovania musíme počítať, i keď syntax by nás zvádzala k niečomu inému.
Prípady pretečenia však môžu byť realizované intuitívne dobre, teda ich výsledkom bude Φ (nulita, nedefinovaná hodnota, NULL, podiel 0/0 podľa toho, čo sa nám viac páči).
V záverečnej úvahe sa vráťme k číslam. Označme min najmenšie počítačové záporné číslo a max najväčšie počítačové kladné číslo. Všimnime si nasledujúcich osem čísel rozdelených na dvojice:
(0, Φ) (1, ∞) (-1, -∞) (min, max)
Týchto osem čísel môžeme považovať za základné prvky v novej počítačovej aritmetike. Navyše jednotlivé zložky v každej dvojici významovo, konštrukčne alebo z hľadiska bitovej reprezentácie úzko súvisia.
Literatúra
[1] Český časopis Epocha číslo 16/07, článok 1200 let stará otázka vyřešena! Nulou lze dělit!, autor Dalibor Novák
[2] Dokumenty Jamesa Andersona:
www.bookofparagon.com/Pages/Papers.htm
Autor: J. Nižnanský
Zdroj: TS PCR