| Ilya Zakharevich on Mon, 08 Jan 2024 01:55:35 +0100 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
| Re: primelimit and forprime() |
On Sun, Jan 07, 2024 at 10:20:02AM -0800, Ilya Zakharevich wrote:
> P.S. This is somewhat similar to what would happen if
> • the advantage of sieving-on-the-fly gradually disappears,
> and it has no advantage over nextprime() at some moment;
> • gp/PARI knows about this, and switches to the nextprime()
> after a certain threshold;
> • However, the threshold is hardwired into gp/PARI, and its
> value is way off for my computer.
I bisected where the switch happens (near a huge number below; compare
with my bug report on a related segfault in
https://pari.math.u-bordeaux.fr/cgi-bin/bugreport.cgi?bug=2520
), and guessed what is the reason for this:
(16:36) gp > ppp=sqrtint(190334138131456478)
%2752 = 436273008
(16:38) gp > -(ppp-(ppp=nextprime(ppp+1)))
%2753 = 1
(16:38) gp > -(ppp-(ppp=nextprime(ppp+1)))
%2754 = 282
*** Observe the prime gap which is larger than 255. ***
So it seems that:
• When removing (my) code for handling arbitrarily large prime limits
an (off by one?) bug was introduced. — This leads to the segfault
mentioned above.
• It seems that this removal leads to requests for large primelimit
being (silently??!!) ignored, and — instead — “the maximal prime
before a prime gap >255” (as above) is used.
• So while I spent a few hours debugging WHY prime limits like 4e9
behave unexpectedly, under the hood gp/PARI was all the time
SILENTLY using the primelimit of about 436e6.
• There is no code to skip sieving above about 2e16 — on my machine
this is the break-even point between sieving and nextprime().
Thanks,
Ilya
P.S. I’m at a loss of words at silent mangling of command-line options…