Karim Belabas on Mon, 26 May 2014 12:09:16 +0200


[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

Re: bug in PARI/GP (Segmentation Fault), please report.


* Bill Allombert [2014-05-26 11:19]:
> > n=2;while(ln(prime(n))>ln(prime(n+1))/exp(1/(n))&&n<pl,n++);print(n)
> >   ***   at top-level: ...=2;while(ln(prime(n))>ln(prime(n+1))/exp(1/(n
> >   ***                                             ^--------------------
> >   *** prime: bug in PARI/GP (Segmentation Fault), please report.
> >   ***   Break loop: type 'break' to go back to GP prompt
> > break> n
> > 23163299
> > break> 
> > 
> > Is this a bug on my machine, or can it be reproduced by others? Has this been reported before?
> 
> We managed to reproduce it:
> ./gp  -f -p1000000000
> ? n=23163299;N = n + 1;while(log(prime(n))>log(prime(n+1))/exp(1/(n))&&n<N,n++);
>   ***   at top-level: ...;while(log(prime(n))>log(prime(n+1))/exp(1/(n
>   ***                                             ^--------------------
>   *** prime: bug in PARI/GP (Segmentation Fault), please report.
>   ***   Break loop: type 'break' to go back to GP prompt
> 
> 
> However, using -p1000000000 is not needed anyore with PARI 2.7, thus you can omit
> it to avoid this bug.

Even simpler

  ./gp -f -p1000000000
  ? prime(23163299+1)  ==> SEGV


Needed primes are now produced dynamically (very fast up to the *square*
of primelimit) and there is no need to precompute huge lists of primes.
In fact, the internal table is limited to p <= 436273009, the 23163299-th prime
(default p <= 499979, i.e. fast primes up to ~2.5Ε11)

There was a bug while restricting the requested 1000000000 to this limit
(a kind of off-by-1 error), creating an incorrect prime table with a
discrepancy between the largest prime it actually contained (436273009)
and the one reported by maxprime (436273291). "Overflowing" the table
and starting to generate primes dynamically would then cause a crash in
certain situations.

As Bill said, abstaining from (uselessly) trying to generate a large table
of primes, also prevents the problem [ don't use -p, and look for primelimit=...
in your gprc ]. The bug is now fixed in 'master'.

Thanks for your report !

Cheers,

    K.B.
--
Karim Belabas, IMB (UMR 5251)  Tel: (+33) (0)5 40 00 26 17
Universite Bordeaux 1          Fax: (+33) (0)5 40 00 69 50
351, cours de la Liberation    http://www.math.u-bordeaux1.fr/~kbelabas/
F-33405 Talence (France)       http://pari.math.u-bordeaux1.fr/  [PARI/GP]
`