February 13, 2011
Please see source in attachment.
The output is

  M2 M3 M5 M7 M13 M17 M19 M31 M61 M89 M107 M127 M521 M607 M1279 M2203 M2281 M3217 M4253 M4423
*** M9689***
  M9941 M11213 M19937
*** M21701***
  M23209

It missed 2 Mersenne Primes 9689 & 21701.
Is it my program bug or bigint broken?
It seems subtle.

Thank you!


February 18, 2011
tsukikage wrote:
> Please see source in attachment.
> The output is
> 
>  M2 M3 M5 M7 M13 M17 M19 M31 M61 M89 M107 M127 M521 M607 M1279 M2203 M2281 M3217 M4253 M4423
> *** M9689***
>  M9941 M11213 M19937
> *** M21701***
>  M23209
> 
> It missed 2 Mersenne Primes 9689 & 21701.
> Is it my program bug or bigint broken?
> It seems subtle.
> 
> Thank you!
> 

That's quite a terrible bug in Bigint. It's slipped through testing because of a fault in the win32 Phobos makefile (someone disabled asserts!). If Phobos is compiled in debug mode, your code causes an assert failure inside the bigint code.

It's a straightforward problem with the fast recursive division implementation, failing to properly normalize intermediate quotients.
Unfortunately the fix won't make the next release, which happens in a few hours.