Bill Allombert on Thu, 25 Jan 2024 15:12:42 +0100 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
Re: Big GOTCHAs WITH forprime() |
On Thu, Jan 25, 2024 at 04:40:07AM -0800, Ilya Zakharevich wrote: > On Thu, Jan 25, 2024 at 10:39:35AM +0100, Bill Allombert wrote: > > > https://pari.math.u-bordeaux.fr/cgi-bin/bugreport.cgi?bug=2520#10 > > > > Yes, I was running the immediate running version but without > > primelimit=400000000000 > > > > Now on linux, with GP 2.15.4: > > > > % gp -qf --default primelimit=400000000000 > > ? my((f(s)=forprime(p=s,s+10^8,)),n=98,x=190333*10^12,y=x+2*10^12,t,z,t0);while(n>0,t=getwalltime();n-=1+if(if(1,f(z=(x+3*y)/4);20000<(t0=-(t-(t=getwalltime())))),x=z;4,y=z;0);print([1.*x,1.*y,t0,n])) > > > > [190333000000000000.00000000000000000000, 190334500000000000.00000000000000000000, 10650, 97] > > [190334125000000000.00000000000000000000, 190334500000000000.00000000000000000000, 32178, 92] > > [190334125000000000.00000000000000000000, 190334406250000000.00000000000000000000, 10259, 91] > > [190334125000000000.00000000000000000000, 190334335937500000.00000000000000000000, 10436, 90] > > [190334125000000000.00000000000000000000, 190334283203125000.00000000000000000000, 10284, 89] > > [190334125000000000.00000000000000000000, 190334243652343750.00000000000000000000, 10629, 88] > > [190334125000000000.00000000000000000000, 190334213989257812.50000000000000000000, 10562, 87] > > Thanks for reporting back! However: > > I repeat the 4th time: > This is not the code mentioned above, in 2520#10. Ah sorry! For some reason, I kept pasting the wrong line. So it seems the first bad commit is commit a286058de199e0477bb51d82a3f092ca71a47ad9 Author: Karim Belabas <Karim.Belabas@math.u-bordeaux1.fr> Date: Mon May 26 11:56:00 2014 +0200 25- (gp -p N) or (primelimit=N in gprc_ for N >= 436273290 resulted in an incorrect primetable. N.B. Such commands are now useless: needed primes are produced dynamically anyway. gdb --arg ./gp.dbg -p400G parisizemax = 4000002048, primelimit = 400000000000 ? my((f(s)=forprime(p=s,s+10^8,)),n=67,x=190334138131456478.73170673847198486328,y=190334138444662596,t,z,t0);while(n>0,t=getabstime();n-=1+if(if(1,f(z=(x+3*y)/4);20000<(t0=-(t-(t=getabstime())))),x=z;4,y=z;0);print([1.*x,1.*y,t0,n])) program received signal SIGSEGV, Segmentation fault. 0x0000555555baac69 in sieve_block (a=190334138381396059, b=190334138381914081, maxpos=32376, sieve=0x7ffff6f200f8 "\377\367\337\377\377\377\377\377\337\377\377\373\377\377\377\377\277\377\367~\375\377\377\333\377\376\377\377\277\377\377\377\375\377\377\377\377\277\377\377\377\377\377\377\357\373\377\377\367\377\337\377\377\377\377\376\373\377~\373\377\377\377\376\377\377\367\357\377\373\277\377\377\377\377\277\377\375\377\377\377\377\377\375\376\375\377\377\376\377\372\357\377\273\377\337\367\377\377\367\277\377\377\377\377\377\377\337\377\377\377\377\357\377\377\277\371\377\377\377\376\377\335\377g\377\377\377\377\367\177\377\377\377\377\377\377\377\377\377}\377\357\377\377\377\377\337\377\377\377\177\375\377\377\377\377\377\377\377\377\377\367\366\357\377\177\375\377\367\377\377\377\373\377=\377\377\377\377\377\377\377\377\377\315\377\377\377\377\377\377\377\377\377\277\377\377\377", <incomplete sequence \357>...) at ../src/language/forprime.c:781 781 NEXT_PRIME_VIADIFF(p, d); /* starts at p = 3 */ (gdb) p p $1 = 436273009 (gdb) p d $2 = (byteptr) 0x7fff087c2001 <error: Cannot access memory at address 0x7fff087c2001> the "obvious" fix is - NEXT_PRIME_VIADIFF(p, d); /* starts at p = 3 */ + NEXT_PRIME_VIADIFF_CHECK(p, d); /* starts at p = 3 */ which leads to ? my((f(s)=forprime(p=s,s+10^8,)),n=67,x=190334138131456478.73170673847198486328,y=190334138444662596,t,z,t0);while(n>0,t=getabstime();n-=1+if(if(1,f(z=(x+3*y)/4);20000<(t0=-(t-(t=getabstime())))),x=z;4,y=z;0);print([1.*x,1.*y,t0,n])) *** at top-level: ...etabstime();n-=1+if(if(1,f(z=(x+3*y)/4);20000< *** ^--------------------- *** in function f: forprime(p=s,s+10^8,) *** ^--------------------- *** not enough precomputed primes which is not quite accurate. Cheers, Bill.