Számok összehasonlítása


Az egyéb aritmetikai műveletekhez szükségünk van arra, hogy számokat össze tudjunk hasonlítani. Mint a fejlesztés során kiderült: olyan összehasonlító függvényre van szükségünk, amelyik egy a és egy b*256pow számot hasonlít össze.

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 digit[i] )return 1;
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.
toc