possible bug in mpz_cmp_d
Tom Tromey
tom at tromey.com
Tue Jul 10 05:04:57 UTC 2018
While adding bignums to Emacs, I found a case where mpz_cmp_d returns a
value I did not expect. I don't know if I have done something wrong or
if this is a bug in GMP.
I'm using x86-64 Fedora 26. I have the system GMP:
$ rpm -q gmp
gmp-6.1.2-4.fc26.x86_64
Consider this test program:
#include <gmp.h>
#include <stdio.h>
int main ()
{
mpz_t val;
mpz_init (val);
mpz_set_si (val, -2305843009213693953);
double d = -2305843009213693953.0;
int x = mpz_cmp_d (val, d);
printf ("%d\n", x);
}
I expect this to print 0, because the numbers are the same, and because
the number can be exactly represented as a double.
However, this program prints -1 for me.
If I convert to double like this:
double xy = mpz_get_d (val);
x = 0;
if (xy < d)
x = -1;
else if (xy > d)
x = 1;
printf ("%d\n", x);
... I do get 0.
thanks,
Tom
More information about the gmp-bugs
mailing list