Problem with large values in GMP...
Torbjörn Granlund
tg at gmplib.org
Thu Mar 17 17:19:27 UTC 2016
Vincent Lefevre <vincent at vinc17.net> writes:
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?
Which 32-bit limitation? There is a 2^31-1 limb limitation, but then
also several functions whose interfaces in various ways limit things
further. (I.e., our printf and scanf functions take int as size
arguments for compatibility; this becomes a more or less severe problem
depending on the number base requested.)
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;
}
We use "int" for the limb count in mpz_t; code manipulating that should
not try to set values which do not fit.
--
Torbjörn
Please encrypt, key id 0xC8601622
More information about the gmp-discuss
mailing list