#include "pdefs.h" #include "precision.h" /* * Compare to zero (normalization not assumed) * * Returns same as pcmp(u, 0); */ int pcmpz(u) register precision u; { register digitPtr uPtr; register int i; (void) pparm(u); i = 0; uPtr = u->value; do { if (*uPtr++ != 0) { if (u->sign) i = -1; else i = 1; break; } } while (uPtr < u->value + u->size); pdestroy(u); return i; } /* * Compare u to v. * * Return: < 0 if u < v * = 0 if u = v * > 0 if u > v * * This routine is the one that assumes results are normalized! * - no leading 0's * - no negative 0 */ int pcmp(u, v) precision u, v; { register digitPtr uPtr, vPtr; register int i; /* should be bigger than posit */ (void) pparm(u); (void) pparm(v); if (u->sign != v->sign) { if (u->sign) i = -1; else i = 1; } else { i = u->size - v->size; if (i == 0) { uPtr = u->value + u->size; vPtr = v->value + v->size; do { if (*--uPtr != *--vPtr) break; } while (vPtr > v->value); if (*uPtr > *vPtr) i = 1; else if (*uPtr < *vPtr) i = -1; } if (u->sign) i = -i; } pdestroy(u); pdestroy(v); return i; }