Earlier I mentioned that the multiplier in PCG32 is the same as Knuth64. The constant is not used. The 6364136223846793005 is not any old number. It will be a prime of sorts - perhaps a Sophie Germain prime. George Marsaglia used Sophie Germain primes for the multiplier in his Multiply With Carry (MWC) generators.
I found another 64-bit LCG:
Code: Select all
Rand = (2862933555777941757ull * Rand + 3037000493ull)
It was cited as being the fastest 64-bit LCG but, in fact, it's speed is the same as Knuth64. It also failed PractRand at 8KB. So, it has nothing on Knuth64 other than a completely different sequence will be output.
PCG32 is now begging to have it's multiplier changed so I did just that.
I got a bit worried as I thought I was heading for 1TB PractRand clean sweep and that would have meant my letting it run on; I am not getting any younger. <smile> Thankfully, I got a small anomaly at 1TB.
This result has not surprised me. John Gleason, of chiSquare2g fame, and I collaborated on a 64-bit MWC way back in 2008. The original code, which I called RND2, was written in BASIC. John converted much of the code to asm. He then wrote some code to generate 384 Sophie Germain primes. When RND2 was executed it chose, at random, one of those primes. This gave us 384 possible sequences to choose from. I further developed RND2 to Complimentary MWC status, base 2^32-1 with a lag array. My CMWC4096 is based upon that work.
PCG32II using 286293355577794175 as a multiplier.
Code: Select all
F:\PR64>My_RNG | RNG_test stdin32
RNG_test using PractRand version 0.94
RNG = RNG_stdin32, seed = unknown
test set = core, folding = standard (32 bit)
rng=RNG_stdin32, seed=unknown
length= 256 megabytes (2^28 bytes), time= 2.9 seconds
no anomalies in 165 test result(s)
rng=RNG_stdin32, seed=unknown
length= 512 megabytes (2^29 bytes), time= 6.1 seconds
no anomalies in 178 test result(s)
rng=RNG_stdin32, seed=unknown
length= 1 gigabyte (2^30 bytes), time= 12.2 seconds
no anomalies in 192 test result(s)
rng=RNG_stdin32, seed=unknown
length= 2 gigabytes (2^31 bytes), time= 24.0 seconds
no anomalies in 204 test result(s)
rng=RNG_stdin32, seed=unknown
length= 4 gigabytes (2^32 bytes), time= 46.7 seconds
no anomalies in 216 test result(s)
rng=RNG_stdin32, seed=unknown
length= 8 gigabytes (2^33 bytes), time= 93.8 seconds
no anomalies in 229 test result(s)
rng=RNG_stdin32, seed=unknown
length= 16 gigabytes (2^34 bytes), time= 186 seconds
no anomalies in 240 test result(s)
rng=RNG_stdin32, seed=unknown
length= 32 gigabytes (2^35 bytes), time= 366 seconds
no anomalies in 251 test result(s)
rng=RNG_stdin32, seed=unknown
length= 64 gigabytes (2^36 bytes), time= 740 seconds
no anomalies in 263 test result(s)
rng=RNG_stdin32, seed=unknown
length= 128 gigabytes (2^37 bytes), time= 1487 seconds
no anomalies in 273 test result(s)
rng=RNG_stdin32, seed=unknown
length= 256 gigabytes (2^38 bytes), time= 2997 seconds
no anomalies in 284 test result(s)
rng=RNG_stdin32, seed=unknown
length= 512 gigabytes (2^39 bytes), time= 6097 seconds
no anomalies in 295 test result(s)
rng=RNG_stdin32, seed=unknown
length= 1 terabyte (2^40 bytes), time= 12202 seconds
Test Name Raw Processed Evaluation
[Low1/32]DC6-9x1Bytes-1 R= +4.6 p = 4.4e-3 unusual
...and 303 test result(s) without anomalies