mini-gmp "bug" missing mpz_fits_sint_p / mpz_fits_uint_p

Marco Bodrato bodrato at mail.dm.unipi.it
Mon Apr 20 13:25:54 UTC 2020


Ciao,

Il 2020-04-20 11:08 Vincent Lefevre ha scritto:
> I think that in general, you should not write code that depends on
> whether INT_MAX + INT_MIN == 0 or not (the constant INT_MAX + INT_MIN
> might be useful in some rare cases, but I think that testing whether
> this constant is 0 or not should be forbidden). This can mean that

Forbidden? Really! :-D

Anyway, using the numerical constant INT_MAX + INT_MIN is a good idea.

What about the following version of the function? :-D

int
mpz_fits_sint_p (const mpz_t u)
{
   return mpz_cmpabs_ui (u, (unsigned long) INT_MAX + (unsigned long)
			(u->_mp_size < 0 ? -(INT_MAX + INT_MIN) : 0)) <= 0;
}

By the way, jokes apart, Niels is right: we do not need to optimise this 
function.
Please Niels, choose the implementation you prefer and change also 
mpz_fits_slong_p accordingly.

Ĝis,
m


More information about the gmp-devel mailing list