Problem with large values in GMP...

Vincent Lefevre vincent at vinc17.net
Thu Mar 17 13:02:13 UTC 2016


On 2016-03-17 10:16:25 +0100, Torbjörn Granlund wrote:
> Furthermore, when using 64-bit ABIs which are LLP64 (like Windoze-64)
> the size calculation looks like it is prone to overflow.  On LP64 (as
> opposed to LLP64) machines, overflow can happen but only when asking for
> a calculation which will never fit in any computer's memory.

You mean that 32-bit limitation has been fixed on LP64 machines?
GMP 6.1.0 under Debian/amd64 still has such a limitation, as shown
with:

#include <stdio.h>
#include <gmp.h>

int main (void)
{
  mpz_t u;
  int i;

  mpz_init (u);
  for (i = 30; i <= 40; i++)
    {
      printf ("i = %d\n", i);
      mpz_realloc2 (u, 1UL << i);
    }
  mpz_clear (u);

  return 0;
}

I've just reported a bug in the Debian BTS:

  https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=818476

BTW, this is quite obvious from the mpz/realloc2.c code, due to the
use of the int type:

  if (sizeof (unsigned long) > sizeof (int)) /* param vs _mp_size field */
    {
      if (UNLIKELY (new_alloc > INT_MAX))
        {
          fprintf (stderr, "gmp: overflow in mpz type\n");
          abort ();
        }
    }

-- 
Vincent Lefèvre <vincent at vinc17.net> - Web: <https://www.vinc17.net/>
100% accessible validated (X)HTML - Blog: <https://www.vinc17.net/blog/>
Work: CR INRIA - computer arithmetic / AriC project (LIP, ENS-Lyon)


More information about the gmp-discuss mailing list