Skip to content

Instantly share code, notes, and snippets.

@amiller
Last active August 29, 2015 14:15
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save amiller/d5820200fd9444af937c to your computer and use it in GitHub Desktop.
Save amiller/d5820200fd9444af937c to your computer and use it in GitHub Desktop.
I convinced myself by studying dieharder code that it does not properly handle uniform-sampling in ranges that are not powers of two. It samples bits simply by masking out bits from the returned 32-bit numbers. I fixed the rng_eth by projecting numbers in the range [2,P-2] to the range [0,2**31) by rejection sampling. Thereafter it passes most tests.
The only test it fails is the dna test. By inspection, this test uses the full range of 32 bits directly, ignoring the max/min parameters.
(coinscope)amiller@dreyfus:~/projects/bbs/dieharder$ dieharder/dieharder -g 600 -a
#=============================================================================#
# dieharder version 3.31.1 Copyright 2003 Robert G. Brown #
#=============================================================================#
rng_name |rands/second| Seed |
eth| 2.92e+07 |3999144134|
#=============================================================================#
test_name |ntup| tsamples |psamples| p-value |Assessment
#=============================================================================#
diehard_birthdays| 0| 100| 100|0.57322699| PASSED
diehard_operm5| 0| 1000000| 100|0.73163257| PASSED
diehard_rank_32x32| 0| 40000| 100|0.08823745| PASSED
diehard_rank_6x8| 0| 100000| 100|0.65754080| PASSED
diehard_bitstream| 0| 2097152| 100|0.22637695| PASSED
diehard_opso| 0| 2097152| 100|0.14685286| PASSED
diehard_oqso| 0| 2097152| 100|0.37375953| PASSED
diehard_dna| 0| 2097152| 100|0.00000000| FAILED
diehard_count_1s_str| 0| 256000| 100|0.43612018| PASSED
diehard_count_1s_byt| 0| 256000| 100|0.40887596| PASSED
diehard_parking_lot| 0| 12000| 100|0.95668914| PASSED
diehard_2dsphere| 2| 8000| 100|0.92125457| PASSED
diehard_3dsphere| 3| 4000| 100|0.76508769| PASSED
diehard_squeeze| 0| 100000| 100|0.30173395| PASSED
diehard_sums| 0| 100| 100|0.14974030| PASSED
diehard_runs| 0| 100000| 100|0.47229272| PASSED
diehard_runs| 0| 100000| 100|0.84054435| PASSED
diehard_craps| 0| 200000| 100|0.86167567| PASSED
diehard_craps| 0| 200000| 100|0.57347133| PASSED
marsaglia_tsang_gcd| 0| 10000000| 100|0.19372002| PASSED
marsaglia_tsang_gcd| 0| 10000000| 100|0.08313557| PASSED
sts_monobit| 1| 100000| 100|0.66920719| PASSED
sts_runs| 2| 100000| 100|0.96688314| PASSED
sts_serial| 1| 100000| 100|0.26785599| PASSED
sts_serial| 2| 100000| 100|0.88471063| PASSED
sts_serial| 3| 100000| 100|0.51284295| PASSED
sts_serial| 3| 100000| 100|0.09829341| PASSED
sts_serial| 4| 100000| 100|0.52597703| PASSED
sts_serial| 4| 100000| 100|0.72489447| PASSED
sts_serial| 5| 100000| 100|0.84211916| PASSED
sts_serial| 5| 100000| 100|0.67540602| PASSED
sts_serial| 6| 100000| 100|0.63360255| PASSED
sts_serial| 6| 100000| 100|0.40314159| PASSED
sts_serial| 7| 100000| 100|0.36792999| PASSED
sts_serial| 7| 100000| 100|0.07218855| PASSED
sts_serial| 8| 100000| 100|0.05454757| PASSED
sts_serial| 8| 100000| 100|0.44783176| PASSED
sts_serial| 9| 100000| 100|0.17820110| PASSED
sts_serial| 9| 100000| 100|0.71091890| PASSED
sts_serial| 10| 100000| 100|0.72051642| PASSED
sts_serial| 10| 100000| 100|0.73695192| PASSED
sts_serial| 11| 100000| 100|0.86123839| PASSED
sts_serial| 11| 100000| 100|0.59012152| PASSED
sts_serial| 12| 100000| 100|0.34382457| PASSED
sts_serial| 12| 100000| 100|0.94869628| PASSED
sts_serial| 13| 100000| 100|0.74264113| PASSED
sts_serial| 13| 100000| 100|0.88383836| PASSED
sts_serial| 14| 100000| 100|0.98058329| PASSED
sts_serial| 14| 100000| 100|0.34965818| PASSED
sts_serial| 15| 100000| 100|0.32016049| PASSED
sts_serial| 15| 100000| 100|0.04738842| PASSED
sts_serial| 16| 100000| 100|0.71446955| PASSED
sts_serial| 16| 100000| 100|0.55872578| PASSED
rgb_bitdist| 1| 100000| 100|0.46424485| PASSED
rgb_bitdist| 2| 100000| 100|0.10996221| PASSED
rgb_bitdist| 3| 100000| 100|0.80632529| PASSED
rgb_bitdist| 4| 100000| 100|0.53963036| PASSED
rgb_bitdist| 5| 100000| 100|0.84636869| PASSED
rgb_bitdist| 6| 100000| 100|0.63067904| PASSED
rgb_bitdist| 7| 100000| 100|0.59485506| PASSED
rgb_bitdist| 8| 100000| 100|0.71852162| PASSED
rgb_bitdist| 9| 100000| 100|0.45588068| PASSED
rgb_bitdist| 10| 100000| 100|0.71287432| PASSED
rgb_bitdist| 11| 100000| 100|0.59060145| PASSED
rgb_bitdist| 12| 100000| 100|0.02862541| PASSED
rgb_minimum_distance| 2| 10000| 1000|0.36490063| PASSED
rgb_minimum_distance| 3| 10000| 1000|0.61423355| PASSED
rgb_minimum_distance| 4| 10000| 1000|0.82752264| PASSED
rgb_minimum_distance| 5| 10000| 1000|0.03561219| PASSED
rgb_permutations| 2| 100000| 100|0.49036213| PASSED
rgb_permutations| 3| 100000| 100|0.74599405| PASSED
rgb_permutations| 4| 100000| 100|0.47988787| PASSED
rgb_permutations| 5| 100000| 100|0.99917408| WEAK
rgb_lagged_sum| 0| 1000000| 100|0.70907326| PASSED
rgb_lagged_sum| 1| 1000000| 100|0.77446952| PASSED
rgb_lagged_sum| 2| 1000000| 100|0.50632229| PASSED
rgb_lagged_sum| 3| 1000000| 100|0.73021792| PASSED
rgb_lagged_sum| 4| 1000000| 100|0.15214504| PASSED
rgb_lagged_sum| 5| 1000000| 100|0.13572366| PASSED
rgb_lagged_sum| 6| 1000000| 100|0.99657021| WEAK
rgb_lagged_sum| 7| 1000000| 100|0.20376610| PASSED
rgb_lagged_sum| 8| 1000000| 100|0.43630399| PASSED
rgb_lagged_sum| 9| 1000000| 100|0.99714736| WEAK
rgb_lagged_sum| 10| 1000000| 100|0.85765053| PASSED
rgb_lagged_sum| 11| 1000000| 100|0.20200924| PASSED
rgb_lagged_sum| 12| 1000000| 100|0.26786572| PASSED
rgb_lagged_sum| 13| 1000000| 100|0.15727018| PASSED
rgb_lagged_sum| 14| 1000000| 100|0.41902198| PASSED
rgb_lagged_sum| 15| 1000000| 100|0.16419998| PASSED
rgb_lagged_sum| 16| 1000000| 100|0.73049294| PASSED
rgb_lagged_sum| 17| 1000000| 100|0.87898623| PASSED
rgb_lagged_sum| 18| 1000000| 100|0.64598176| PASSED
rgb_lagged_sum| 19| 1000000| 100|0.20892605| PASSED
rgb_lagged_sum| 20| 1000000| 100|0.97241700| PASSED
rgb_lagged_sum| 21| 1000000| 100|0.88608170| PASSED
rgb_lagged_sum| 22| 1000000| 100|0.49651294| PASSED
rgb_lagged_sum| 23| 1000000| 100|0.53054533| PASSED
rgb_lagged_sum| 24| 1000000| 100|0.85572489| PASSED
rgb_lagged_sum| 25| 1000000| 100|0.97934929| PASSED
rgb_lagged_sum| 26| 1000000| 100|0.96336961| PASSED
rgb_lagged_sum| 27| 1000000| 100|0.93758335| PASSED
rgb_lagged_sum| 28| 1000000| 100|0.37788238| PASSED
rgb_lagged_sum| 29| 1000000| 100|0.26578783| PASSED
rgb_lagged_sum| 30| 1000000| 100|0.66480744| PASSED
rgb_lagged_sum| 31| 1000000| 100|0.31283322| PASSED
rgb_lagged_sum| 32| 1000000| 100|0.78452168| PASSED
rgb_kstest_test| 0| 10000| 1000|0.50284229| PASSED
dab_bytedistrib| 0| 51200000| 1|0.89232450| PASSED
dab_dct| 256| 50000| 1|0.77745310| PASSED
Preparing to run test 207. ntuple = 0
dab_filltree| 32| 15000000| 1|0.44786623| PASSED
dab_filltree| 32| 15000000| 1|0.43227757| PASSED
Preparing to run test 208. ntuple = 0
dab_filltree2| 0| 5000000| 1|0.28973005| PASSED
dab_filltree2| 1| 5000000| 1|0.54544738| PASSED
Preparing to run test 209. ntuple = 0
dab_monobit2| 12| 65000000| 1|0.87231826| PASSED
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment