I found a formula last night for "closeness" to an known distribution:
Sumof (Actual - Expected) squared / Expected
This is related to Chi-Square and is different from my |Actual - Expected| / Expected quality measure.
I have the full results for xoroshiro32+ and xoroshiro32++ but unfortunately I can't attach files using this PC so there will be a delay in posting them.
I calculated the sums as follows.
Let a = Actual and b = Expected, then
(a-b)^2/b = (a^2 - 2ab + b^2)/b = a^2/b - 2a + b = a(a/b - 2) + b
Here are the best Chi-Square scores for xoroshiro32++ pair frequency, identical to what the XORO32 output frequency would be for the same [a,b,c,d]. Unsurprisingly none of the xoroshiro32+ candidates (using d = 0 slot) make the cut.
total = sum of pfreq0-pfreq12 (total > 9999 excluded)
total0-3 = sum of pfreq0-pfreq3
total = sum of pfreq0-pfreq12 (total > 9999 excluded)
total0-3 = sum of pfreq0-pfreq3
And lower totals are better right. How big do the worst totals get?
Yes, lower is better. I think the worst score is 5 x 10^12 or 2^42. Most of the + and a few ++ are > 2^31. QuickBASIC 32-bit integers are signed, in range -2^31 to +2^31-1 (- 2147483648 to +2147483647) and I store any scores greater than the latter as 2147483647 in my files.
At first look there is a total lack of correlation of best with best against the grid summary charts.
And another nail here is there is also d=15 cases with very good distribution scores. d=15 (for s16++) is always extremely poor scoring in Practrand. I only left them in because they don't consume any significant MIPS to be culled.
The correlation between PractRand scores and these new Chi-Square scores will be interesting.
EDIT:
Written before previous post seen. As I've said several times before, the distributions could be used as tie-breakers for the candidates with good PractRand scores. A few of the new Chi-Square scores are amazingly low.
Evan, how big is a .7z file with all the xoroshiro32++ grid scores?
When you say *all*, you do know I've only got a limited number of candidates with completed grids, right? They are the ones already charted. I built a list of promising candidates from the culling run, plus a few we wanted to compare with. The gridding was run only on that list.
To grid every double summing (++) candidate for the 84 full-period engine triplets, 84 x 15 x 256 = 322560 Practrand files, the run time will be over 100 years 5 months. EDIT: Err, it's 3 hours per grid, not per score.
Evan, how big is a .7z file with all the xoroshiro32++ grid scores?
When you say *all*, you do know I've only got a limited number of candidates with completed grids, right? They are the ones already charted. I built a list of promising candidates from the culling run, plus a few we wanted to compare with. The gridding was run only on that list.
To grid every double summing (++) candidate for the 84 full-period engine triplets, 84 x 15 x 256 = 322560 Practrand files, the run time will be over 100 years 5 months. EDIT: It's 3 hours per grid, not per score.
You had some grid tests running, which took a while and finished a few days ago. I meant all of those.
[5,2,6,5] and [8,5,13,2] and a few others with Chi-Square total < 100 and half-decent PractRand culling scores could be worth gridding later this week.
I'm itching to know what Chris's distribution looks like.
Oh, those are the grids of even-apertured double-iterated. It doesn't directly compare to the existing chart because that one uses full grids. I should either make the even-apertured version of the already posted chart, or finish the double-iterated grids by also doing their odd-apertures.
At first look there is a total lack of correlation of best with best against the grid summary charts.
And another nail here is there is also d=15 cases with very good distribution scores. d=15 (for s16++) is always extremely poor scoring in Practrand. I only left them in because they don't consume any significant MIPS to be culled.
Most of the [a,b,c,15] are poor or worse. Here are the 84 Chi-Square scores, with a couple clipped at 2147483647:
I was too tired to concentrate earlier so I went to bed. I've just hacked in Chris's algorithm, named it "Scro-rarns", and started it running. Everything is coming up either 16G or 32G and it's a 32x32 grid so it'll be a lot longer to run than anything from the Xoroshiro32 generators. Luckily it's also only a single grid.
I was too tired to concentrate earlier so I went to bed. I've just hacked in Chris's algorithm, named it "Scro-rarns", and started it running. Everything is coming up either 16G or 32G and it's a 32x32 grid so it'll be a lot longer to run than anything from the Xoroshiro32 generators. Luckily it's also only a single grid.
It's the output distribution I'm interested in, not the grid scores!
You'll need to replace the double-iterated xoroshiro32 with Chris's algorithm, the rest of the C code can stay the same.
P.S. Full xoroshiro32 Chi-Square results sent by email.
On that note, there isn't any distribution data done for double iterated Xoroshiro either. I had, in fact, entirely removed any attempt to handle double iteration. I gather you are wanting it in a similar fashion to Chris's one - without the pairing step.
On that note, there isn't any distribution data done for double iterated Xoroshiro either. I had, in fact, entirely removed any attempt to handle double iteration. I gather you are wanting it in a similar fashion to Chris's one - without the pairing step.
You have 1344 lots of distribution data for double iterated xoroshiro32+ and xoroshiro32++! Simply replace the 32-bit xoroshiro output pair with Chris's single output and use that as the 4GB array index.
Oh, I see I didn't have that detail specified in the data files. No, there's nothing but single iterated data in every 7zip file. For the s8 right up to even the one s17 I did.
I did try to explain the difficulties I was having with making pairing work when double iterated. That why I'd scrapped it totally.
Here's the frequency distribution data for Chris's generator plain, without any pairing. I'll work on reintroducing Xoroshiro double iteration code in the morning.
Here's the frequency distribution data for Chris's generator plain, without any pairing. I'll work on reintroducing Xoroshiro double iteration code in the morning.
Thanks, Evan. This was the final frequency distribution I wanted. What xoroshiro double iteration do you think I was requesting?
Chris's generator has the best output distribution but a few xoroshiro32++ get quite close.
Chris's generator is also excellent on zero distribution and better than the top 12 xoroshiro32++ above, which are ranked in that table on XORO32 output frequency (= xoroshiro32++ pair frequency).
Here's the frequency distribution data for Chris's generator plain, without any pairing. I'll work on reintroducing Xoroshiro double iteration code in the morning.
Thanks, Evan. This was the final frequency distribution I wanted. What xoroshiro double iteration do you think I was requesting?
Chris's generator has the best output distribution but a few xoroshiro32++ get quite close.
Evan, did you get my email? I could send the zero run results later.
Some of the best xoroshiro32++ above have good culling scores, e.g. [8,15,3,2]. The distributions for Chris's generator prove it's a very good 32-bit state, 32-bit output PRNG and confirm that the distributions for double-iterated xoroshiro32++ / XORO32 tell us something useful. By treating pairs of outputs as a single 32-bit output we can get fairly close in quality to Chris's generator, which passes PractRand because there is no equidistribution within his 32 bits, whereas both of our 16-bit values are equidistributed within themselves and PractRand cannot distinguish between one 32-bit and two 16-bit outputs.
Do all the grid failures occur only for the FPF tests? I'm wondering whether we would get max scores for everything if the FPF were removed. If other tests fail then we could use those to cull candidates, then use the distributions to select the best.
Comments
Here are the best Chi-Square scores for xoroshiro32++ pair frequency, identical to what the XORO32 output frequency would be for the same [a,b,c,d]. Unsurprisingly none of the xoroshiro32+ candidates (using d = 0 slot) make the cut.
total = sum of pfreq0-pfreq12 (total > 9999 excluded)
total0-3 = sum of pfreq0-pfreq3
#a, b, c, d, total, total0-3 1, 2, 8, 4, 8259, 4053 2, 1, 11, 3, 9196, 4428 2, 1, 11, 11, 2899, 1457 2, 1, 15, 3, 437, 332 2, 2, 7, 4, 7248, 3706 2, 2, 7, 6, 1982, 1025 2, 2, 7, 7, 635, 278 2, 2, 7, 11, 4244, 1976 2, 6, 15, 4, 7913, 4171 2, 6, 15, 5, 231, 116 2, 6, 15, 12, 1101, 500 2, 8, 7, 2, 2243, 1119 2, 8, 7, 11, 62, 28 2, 9, 9, 2, 2771, 1360 2, 9, 9, 5, 3766, 1861 2, 11, 3, 3, 8595, 4173 2, 11, 3, 11, 8873, 4542 3, 2, 6, 5, 666, 349 3, 2, 6, 7, 9868, 4942 3, 3, 10, 1, 3702, 1863 3, 3, 10, 2, 592, 328 3, 3, 10, 4, 5584, 2752 3, 3, 10, 7, 1136, 743 3, 3, 10, 10, 1834, 871 3, 3, 10, 11, 5028, 2509 3, 11, 2, 9, 908, 467 3, 11, 14, 4, 199, 108 3, 11, 14, 5, 1605, 726 3, 11, 14, 7, 60, 18 4, 1, 9, 1, 2990, 1556 4, 1, 9, 5, 317, 184 4, 1, 9, 9, 9054, 4409 4, 7, 15, 13, 8067, 4123 5, 2, 6, 2, 4163, 2081 5, 2, 6, 3, 5554, 2800 5, 2, 6, 4, 5702, 2683 5, 2, 6, 5, 14, 3 5, 2, 6, 7, 8240, 4047 5, 2, 6, 10, 506, 208 5, 8, 4, 7, 4043, 2156 5, 14, 12, 7, 2401, 1740 6, 2, 3, 2, 2864, 1328 6, 2, 3, 3, 6877, 3398 6, 2, 3, 9, 1674, 818 6, 2, 5, 3, 989, 479 6, 2, 5, 4, 1949, 931 6, 2, 5, 6, 3344, 1613 6, 2, 5, 9, 3415, 1609 6, 2, 11, 1, 6172, 3093 6, 2, 11, 3, 1963, 1031 6, 2, 11, 6, 3427, 1693 6, 2, 11, 7, 7288, 3696 6, 2, 11, 10, 2169, 1093 6, 2, 11, 12, 6463, 3079 6, 2, 11, 13, 3592, 1831 6, 3, 15, 4, 9842, 4893 6, 3, 15, 6, 2814, 1420 6, 3, 15, 9, 5418, 2612 6, 14, 11, 7, 7004, 3297 7, 1, 8, 5, 4748, 2357 7, 1, 8, 6, 109, 53 7, 2, 2, 1, 632, 240 7, 2, 2, 3, 7828, 4060 7, 2, 2, 5, 2768, 1406 7, 2, 2, 6, 7441, 3656 7, 2, 10, 4, 8958, 4385 7, 2, 10, 5, 9609, 4791 7, 2, 10, 13, 4617, 2321 7, 2, 14, 3, 760, 330 7, 2, 14, 4, 3531, 1814 7, 2, 14, 7, 708, 337 7, 2, 14, 10, 315, 128 7, 2, 14, 13, 503, 201 7, 8, 2, 10, 6986, 3264 7, 8, 2, 11, 4090, 1952 7, 10, 10, 2, 493, 208 7, 10, 10, 4, 9179, 4357 7, 15, 8, 4, 1381, 783 7, 15, 8, 5, 2325, 1156 8, 1, 7, 2, 1242, 554 8, 1, 7, 3, 955, 517 8, 1, 7, 5, 672, 273 8, 1, 7, 15, 6865, 3245 8, 2, 1, 2, 7870, 3988 8, 5, 13, 1, 2013, 1013 8, 5, 13, 2, 8, 2 8, 5, 13, 3, 177, 78 8, 5, 13, 5, 725, 323 8, 5, 13, 6, 6413, 3185 8, 5, 13, 7, 4483, 1918 8, 5, 13, 11, 4084, 1930 8, 7, 15, 5, 8783, 4441 8, 7, 15, 13, 212, 103 8, 7, 15, 14, 3453, 1684 8, 9, 13, 6, 3469, 1633 8, 9, 13, 11, 8158, 4100 8, 9, 13, 13, 3679, 1633 8, 15, 7, 5, 1985, 755 9, 2, 14, 4, 8651, 4191 9, 2, 14, 6, 8905, 4320 9, 2, 14, 11, 5692, 2821 9, 2, 14, 12, 1576, 739 9, 2, 14, 13, 8, 1 9, 2, 14, 14, 4730, 2226 9, 2, 14, 15, 98, 35 9, 8, 14, 3, 310, 122 9, 8, 14, 12, 9829, 4889 9, 9, 2, 1, 1128, 515 9, 9, 2, 4, 751, 380 9, 9, 2, 10, 9703, 4810 9, 9, 2, 11, 7308, 3621 9, 9, 2, 12, 7918, 3959 10, 2, 7, 1, 1311, 660 10, 2, 7, 2, 9762, 4775 10, 2, 7, 4, 163, 61 10, 2, 7, 9, 2862, 435 10, 2, 7, 12, 365, 197 10, 2, 7, 15, 7706, 3405 10, 3, 3, 4, 5638, 2843 10, 3, 11, 10, 5946, 2835 10, 3, 11, 12, 4247, 2043 10, 5, 13, 11, 7218, 3585 10, 7, 11, 9, 230, 101 10, 7, 11, 12, 2368, 1153 10, 10, 7, 2, 258, 132 10, 10, 7, 12, 4409, 2217 11, 1, 2, 7, 9764, 5138 11, 1, 2, 12, 8881, 4398 11, 1, 2, 13, 274, 142 11, 1, 14, 14, 1104, 525 11, 2, 6, 2, 12, 2 11, 2, 6, 9, 8188, 4019 11, 2, 6, 12, 8941, 4462 11, 2, 6, 13, 2313, 1197 11, 3, 10, 7, 5456, 2862 11, 3, 10, 11, 8661, 4308 11, 3, 10, 13, 5704, 2736 11, 7, 10, 9, 6701, 3339 11, 7, 10, 14, 9625, 4982 11, 8, 12, 9, 8502, 4225 11, 10, 12, 12, 1731, 946 11, 10, 12, 13, 7979, 3886 11, 11, 14, 8, 3001, 824 11, 11, 14, 9, 840, 376 11, 11, 14, 10, 1158, 582 11, 11, 14, 11, 9096, 4434 11, 11, 14, 13, 3596, 1806 11, 14, 6, 2, 5139, 2779 11, 14, 6, 3, 4432, 2175 12, 8, 11, 9, 1465, 723 12, 8, 11, 13, 8240, 4213 12, 8, 11, 14, 9441, 4934 12, 10, 11, 6, 8176, 4118 12, 10, 11, 12, 5616, 2784 12, 14, 5, 1, 215, 112 12, 14, 5, 13, 1221, 581 13, 3, 14, 10, 439, 172 13, 3, 14, 11, 3789, 1806 13, 3, 14, 12, 2508, 1151 13, 3, 14, 13, 8435, 4068 13, 5, 8, 2, 7557, 3511 13, 5, 8, 5, 462, 212 13, 5, 8, 6, 7167, 3289 13, 5, 8, 10, 50, 34 13, 5, 8, 13, 2564, 1149 13, 5, 10, 9, 24, 18 13, 5, 10, 12, 2348, 1165 13, 5, 10, 13, 3846, 1914 13, 5, 10, 14, 2346, 1240 13, 9, 8, 2, 3380, 1670 13, 9, 8, 5, 5769, 2753 13, 9, 8, 6, 124, 75 13, 11, 14, 5, 7118, 3468 13, 11, 14, 13, 4444, 2130 13, 12, 14, 7, 6744, 3363 13, 12, 14, 11, 1339, 687 13, 12, 14, 13, 2378, 1239 13, 13, 14, 11, 2180, 971 13, 13, 14, 13, 8, 2 14, 1, 11, 7, 4950, 2398 14, 1, 11, 9, 2815, 1419 14, 1, 11, 10, 1357, 660 14, 1, 11, 12, 4207, 2111 14, 2, 7, 6, 1606, 812 14, 2, 7, 10, 425, 151 14, 2, 7, 12, 7806, 3810 14, 2, 7, 13, 1045, 439 14, 2, 7, 14, 499, 214 14, 2, 7, 15, 131, 78 14, 2, 9, 1, 672, 397 14, 2, 9, 9, 68, 19 14, 2, 9, 10, 425, 215 14, 2, 9, 12, 919, 465 14, 3, 13, 11, 6274, 3148 14, 8, 9, 10, 4357, 2110 14, 8, 9, 11, 8164, 3883 14, 11, 3, 4, 63, 37 14, 11, 3, 10, 3210, 1603 14, 11, 11, 10, 8027, 3740 14, 11, 13, 5, 8381, 4170 14, 11, 13, 7, 282, 149 14, 11, 13, 11, 7192, 3488 14, 12, 13, 6, 162, 70 14, 12, 13, 7, 231, 73 14, 13, 13, 6, 1178, 642 15, 3, 6, 1, 383, 197 15, 3, 6, 12, 2398, 1113 15, 4, 12, 4, 6530, 3513 15, 4, 12, 6, 1013, 504 15, 4, 12, 7, 3750, 1951 15, 4, 12, 13, 6094, 2852 15, 4, 12, 14, 42, 8 15, 6, 2, 6, 1976, 855 15, 6, 2, 9, 984, 498 15, 6, 2, 10, 1373, 630 15, 6, 2, 11, 1282, 629 15, 7, 4, 3, 5646, 2645 15, 7, 4, 7, 4149, 2038 15, 7, 8, 5, 8923, 4408 15, 7, 8, 11, 6269, 3012 15, 7, 8, 13, 5883, 2781
From earlier comments, admittedly Z80, I was thinking you might be using some novel OS where assembly coding was still the expected norm.
Just the formatted grid tables, please.
Next year is my 20th anniversary of using Win98SE. My 1024 x 768 LCD monitor is 20 years old and not one pixel is stuck on.
Yes, lower is better. I think the worst score is 5 x 10^12 or 2^42. Most of the + and a few ++ are > 2^31. QuickBASIC 32-bit integers are signed, in range -2^31 to +2^31-1 (- 2147483648 to +2147483647) and I store any scores greater than the latter as 2147483647 in my files.
And another nail here is there is also d=15 cases with very good distribution scores. d=15 (for s16++) is always extremely poor scoring in Practrand. I only left them in because they don't consume any significant MIPS to be culled.
EDIT:
Written before previous post seen. As I've said several times before, the distributions could be used as tie-breakers for the candidates with good PractRand scores. A few of the new Chi-Square scores are amazingly low.
When you say *all*, you do know I've only got a limited number of candidates with completed grids, right? They are the ones already charted. I built a list of promising candidates from the culling run, plus a few we wanted to compare with. The gridding was run only on that list.
To grid every double summing (++) candidate for the 84 full-period engine triplets, 84 x 15 x 256 = 322560 Practrand files, the run time will be over 100 years 5 months. EDIT: Err, it's 3 hours per grid, not per score.
You had some grid tests running, which took a while and finished a few days ago. I meant all of those.
I'm itching to know what Chris's distribution looks like.
21 years ago I deleted Windows 95 or whatever from my 100MHz AMD 486 and went all Linux.
Until I got embroiled with an MS Surface Pro 4 and Win 10 two years back.
Most of the [a,b,c,15] are poor or worse. Here are the 84 Chi-Square scores, with a couple clipped at 2147483647:
#a, b, c, d, total, total0-3 1, 2, 8, 15, 149436, 62647 2, 1, 11, 15, 3718850, 1853819 2, 1, 15, 15, 886630144, 101367632 2, 2, 7, 15, 599631, 300428 2, 6, 15, 15, 89327336, 38966396 2, 8, 7, 15, 9574851, 4551603 2, 9, 9, 15, 2147483647, 180585120 2, 11, 3, 15, 2147483647, 495778912 3, 2, 6, 15, 1185676, 610431 3, 3, 10, 15, 142960, 70704 3, 11, 2, 15, 252339664, 72427344 3, 11, 14, 15, 1510397, 738248 4, 1, 9, 15, 450559, 228315 4, 7, 15, 15, 859671, 439286 4, 8, 5, 15, 275770, 134426 5, 2, 6, 15, 1016916, 524822 5, 8, 4, 15, 6433043, 2812407 5, 14, 12, 15, 119337, 59842 6, 2, 3, 15, 62419, 31000 6, 2, 5, 15, 973361, 471183 6, 2, 11, 15, 55351, 26290 6, 3, 15, 15, 1013340, 518160 6, 14, 11, 15, 634962, 323388 7, 1, 8, 15, 885663, 449510 7, 2, 2, 15, 1126273, 576762 7, 2, 10, 15, 195748, 98226 7, 2, 14, 15, 436059, 220223 7, 8, 2, 15, 433726, 218222 7, 10, 10, 15, 16397, 7640 7, 15, 8, 15, 1182654, 606170 8, 1, 7, 15, 6865, 3245 8, 2, 1, 15, 632747, 318082 8, 5, 13, 15, 169870, 84074 8, 7, 15, 15, 42317, 18391 8, 9, 13, 15, 348706, 168644 8, 15, 7, 15, 40301184, 14935628 9, 1, 4, 15, 158934, 79423 9, 2, 14, 15, 98, 35 9, 8, 14, 15, 67592, 33763 9, 9, 2, 15, 336137, 169654 10, 2, 7, 15, 7706, 3405 10, 3, 3, 15, 441621, 222347 10, 3, 11, 15, 151086, 74318 10, 5, 13, 15, 427255, 215594 10, 7, 11, 15, 221109, 109617 10, 10, 7, 15, 156122, 72327 11, 1, 2, 15, 1243321, 636651 11, 1, 14, 15, 438079, 221395 11, 2, 6, 15, 972787, 477669 11, 3, 10, 15, 2479008, 1193606 11, 7, 10, 15, 15628863, 6498136 11, 8, 12, 15, 889375, 452986 11, 10, 12, 15, 387449, 194444 11, 11, 14, 15, 892782, 456684 11, 14, 6, 15, 612296, 294039 12, 4, 15, 15, 1523640, 781868 12, 8, 11, 15, 14350385, 6120270 12, 10, 11, 15, 30698348, 12165989 12, 10, 13, 15, 1511360, 777129 12, 14, 5, 15, 56850, 28583 13, 3, 14, 15, 4633898, 2445171 13, 5, 8, 15, 20235, 10163 13, 5, 10, 15, 1974958, 941047 13, 9, 8, 15, 37108, 18527 13, 10, 12, 15, 42227368, 16622364 13, 11, 14, 15, 3906063, 2031714 13, 12, 14, 15, 3130804, 1611118 13, 13, 14, 15, 8888576, 4855736 14, 1, 11, 15, 66705, 32957 14, 2, 7, 15, 131, 78 14, 2, 9, 15, 381339, 193602 14, 3, 13, 15, 144803216, 53731936 14, 8, 9, 15, 148805, 73486 14, 11, 3, 15, 2598640, 1358080 14, 11, 11, 15, 1069697, 524492 14, 11, 13, 15, 217692352, 64579972 14, 12, 13, 15, 365565920, 72274960 14, 13, 13, 15, 327109568, 74458240 15, 1, 2, 15, 54482208, 34678944 15, 3, 6, 15, 902463, 462112 15, 4, 12, 15, 250755, 132021 15, 6, 2, 15, 7725018, 4110305 15, 7, 4, 15, 1157011, 587086 15, 7, 8, 15, 143702, 72610
Win98SE - the best DOS app ever written!
And if not, what would that imply about Xoroshiro's erratic scores?
It's the output distribution I'm interested in, not the grid scores!
You'll need to replace the double-iterated xoroshiro32 with Chris's algorithm, the rest of the C code can stay the same.
P.S. Full xoroshiro32 Chi-Square results sent by email.
Haven't seen an email as yet.
You have 1344 lots of distribution data for double iterated xoroshiro32+ and xoroshiro32++! Simply replace the 32-bit xoroshiro output pair with Chris's single output and use that as the 4GB array index.
I did try to explain the difficulties I was having with making pairing work when double iterated. That why I'd scrapped it totally.
Thanks, Evan. This was the final frequency distribution I wanted. What xoroshiro double iteration do you think I was requesting?
Chris's generator has the best output distribution but a few xoroshiro32++ get quite close.
# Chi-Squares scores for 32-bit output frequency # best generator pfreq0-12, pfreq0-3 scro, 2.82, 0.61 # best xoroshiro32++ 9, 2, 14, 13, 7.56, 0.63 8, 5, 13, 2, 7.71, 1.79 13, 13, 14, 13, 8.48, 2.38 11, 2, 6, 2, 11.62, 2.45 5, 2, 6, 5, 13.60, 3.00 13, 5, 10, 9, 24.01, 18.08 15, 4, 12, 14, 42.05, 7.57 13, 5, 8, 10, 49.53, 34.31 3, 11, 14, 7, 60.27, 18.27 2, 8, 7, 11, 62.30, 28.32 14, 11, 3, 4, 62.95, 36.75 14, 2, 9, 9, 68.38, 18.79 # worst xoroshiro32++ 15, 1, 2, 1, 2.11286E+13, 1889895552 # worst xoroshiro32+ 8, 15, 7, 2.03313E+14, 3607458560
Until yesterday, none at all. I've never once done even a single case in the form like Scro-rarns, that's for sure.
Evan, did you get my email? I could send the zero run results later.
Some of the best xoroshiro32++ above have good culling scores, e.g. [8,15,3,2]. The distributions for Chris's generator prove it's a very good 32-bit state, 32-bit output PRNG and confirm that the distributions for double-iterated xoroshiro32++ / XORO32 tell us something useful. By treating pairs of outputs as a single 32-bit output we can get fairly close in quality to Chris's generator, which passes PractRand because there is no equidistribution within his 32 bits, whereas both of our 16-bit values are equidistributed within themselves and PractRand cannot distinguish between one 32-bit and two 16-bit outputs.
Do all the grid failures occur only for the FPF tests? I'm wondering whether we would get max scores for everything if the FPF were removed. If other tests fail then we could use those to cull candidates, then use the distributions to select the best.