Bug Report GMP-5.1.1 Mini-gmp t-double.c

Michael Tate michael.tate at wanadoo.fr
Mon Feb 25 12:58:36 CET 2013


Hello, I have come across a possible failure in the mini-gmp test suite and
have decided to submit a report.

1) Gmp version:5.1.1
2) Built from tarball using standard options
3) Using  gcc (GCC) 4.7.2 20121109 (Red Hat 4.7.2-8

Requested Outputs:
uname -a:
Linux n110-fc18-ssd 3.7.8-202.fc18.i686.PAE #1 SMP Fri Feb 15 17:47:05 
UTC 2013 i686 i686 i386 GNU/Linux

./config.guess:
atom-pc-linux-gnu

Outline:
Running 'make check' in mini-gmp/tests produces an error in t-double.c
Partial output follows:
PASS: t-add
PASS: t-sub
PASS: t-mul
PASS: t-invert
PASS: t-div
PASS: t-div_2exp
mpz_cmp_d (x, f) failed:
x: 87f41fe00000000
memory clobbered before allocated block
./run-tests: line 57:  4383 Aborted                 (core dumped) "$1" 
$testflags
FAIL: t-double
PASS: t-cmp_d
PASS: t-gcd
PASS: t-lcm
PASS: t-import
PASS: t-comb
PASS: t-signed
PASS: t-sqrt
PASS: t-root
PASS: t-powm
PASS: t-logops
PASS: t-bitops
PASS: t-scan
PASS: t-str
PASS: t-reuse
====================
1 of 21 tests failed
====================

Comments:
I believe I have found the cause of this problem. The test program
increments/decrements a double by 1.0 during the course of testing. If
the double has more than 16 digits of precision, then the inc/dec fails
to take effect and the succeeding test fails.

Code Block:
       if ((f == d) ? (mpz_cmp_d (x, d) != 0) : (mpz_cmp_d (x, d) >= 0))
     {
       fprintf (stderr, "mpz_cmp_d (x, d) failed:\n");
       goto dumperror;
     }

       // This increment fails if double has more than 16 digits of 
precision
       // Sample values: x=612280633523175424 
f=612280633523175424.000000  d=612280633523175424.000000

       f = d + 1.0;

       if (f > d && ! (mpz_cmp_d (x, f) < 0))
     {
       fprintf (stderr, "mpz_cmp_d (x, f) failed:\n");
       goto dumperror;
     }


Possible solution:
I have rewritten the t-double.c routine using a much more conservative
random double generator, using about 15 digits of precision, and this
seems to work correctly.



Thank you for all your work on the library. I hope the
report may be of some help.

Best wishes
Mike



More information about the gmp-bugs mailing list