A számítások során ideiglenesen előállnak olyan számok, amelyeknél a
struktúra
digit tömbjének végén, azaz a magas helyiértéken nullák vannak.
Ezek a számok a számítás további folyamatában normalizálásra kerülnek,
azaz a vezető nullákat a program levágja. Ez a függvény számít arra, hogy
a paraméterei normalizáltak, és arra is, hogy pow nem negatív.
/*
Összehasonlítja az a és b*256pow számokat.
Visszatérési érték:
1 ha a > b*256pow
0 ha a = b*256pow
-1 ha a pow
*/
int powerCompare(Number a, Number b, int pow){
register int i,j;
Ha valamelyik szám hoszabb, mint a másik, akkor természetszerűen
nagyobbnak is kell lennie, hiszen a bevezető nullák nem engedélyezettek.
if( a->n > (i=b->n+pow) )return 1;
if( a->n
Ha viszont a két szám hossza megegyezik
akkor az a nagyobb, amelyiknél a nagyobb helyiértékektől lefelé haladva
előbb találunk nagyobb digitet. Természetesen a helyiértékeket pow
bájttal eltolva kell érteni.
for( j=b->n ; j-- ; )
if( i=((int)a->digit[pow+j]) - ((int)b->digit[j]) )return i;
Ha ezek a helyiértékek mind megegyeznek, akkor b már nem lehet
nagyobb, hiszen b minden pow helyiértéknél kisebb
digitje nulla. Ha ezen helyiértékek valamelyikén a egy digitje
nem nulla, akkor a a nagyobb,
for( i=0 ; i
ellenkező esetben a két szám megegyezik.
return 0;
}
Érdemes meggondolni, hogy a program hogyan működik speciális értékek esetén,
például, ha pow nulla.