long int AP_toint(T x) { unsigned long u; assert(x); u = XP_toint(x->ndigits, x->digits)%(LONG_MAX + 1UL); if (x->sign == -1) return -(long)u; else return (long)u; }
long int AP_modi(T x, long int y) { long int rem; T r; unsigned char d[sizeof (unsigned long)]; struct T t; t.size = sizeof d; t.digits = d; r = AP_mod(x, set(&t, y)); rem = XP_toint(r->ndigits, r->digits); AP_free(&r); return rem; }
unsigned long MP_modui(T x, unsigned long y) { assert(x); if (y == 0) RAISE(MP_Dividebyzero); else if (y < BASE) { int r = XP_quotient(nbytes, tmp[2], x, y); if (nbits < 8 && y >= (1U<<nbits)) RAISE(MP_Overflow); return r; } else if (applyu(MP_modu, tmp[2], x, y)) RAISE(MP_Overflow); return XP_toint(nbytes, tmp[2]); }
int MP_cmpui(T x, unsigned long y) { assert(x); if ((int)sizeof y >= nbytes) { unsigned long v = XP_toint(nbytes, x); if (v < y) return -1; else if (v > y) return 1; else return 0; } else { XP_fromint(nbytes, tmp[2], y); return XP_cmp(nbytes, x, tmp[2]); } }
unsigned long MP_tointu(T x) { unsigned char d[sizeof (unsigned long)]; assert(x); MP_cvtu(8*sizeof d, d, x); return XP_toint(sizeof d, d); }