2015-10-05 197 views
6

我有几个包含大量由各种RNG生成的整数(大约250万)的.txt文件。我想用死硬的测试套件来测试这些RNG。使用包含随机数的.txt文件和diehard测试套件

的.txt文件是这样的:

#============================================== 
# generator Park  seed = 1 
#============================================= 
type: d 
count: 2500000 
numbit: 32 
16807 
282475249 

其次是ofcourse,多个整数。我用下面的命令来运行这个死忠.txt文件

dieharder -f randdata.txt -a - g 202 

我的问题是,是我的.txt文件正确(特别是前几行),以及为什么这些线路neccesary?我问这个问题的原因是因为每个由某些RNG生成的.txt文件(一些好的,一些坏的)几乎无法通过每个测试,我想知道这是否是因为我在传递.txt文件时发生了一些错误,或者如果我的RNG都很糟糕。

回答

8

是的,那个输入文件看起来是正确的。这似乎是一个数量dieharder测试失败,甚至与dieharder自己发生器产生10M输入:

$ dieharder -o -f example.input -t 10000000 # Generate an input file 
$ head -n 10 example.input 
#================================================================== 
# generator mt19937 seed = 3423143424 
#================================================================== 
type: d 
count: 10000000 
numbit: 32 
2310531048 
808929469 
2423056114 
4237891648 
$ dieharder -a -g 202 -f example.input 
#=============================================================================# 
#   dieharder version 3.31.1 Copyright 2003 Robert G. Brown   # 
#=============================================================================# 
    rng_name |   filename    |rands/second| 
    file_input|     example.input| 2.50e+06 | 
#=============================================================================# 
     test_name |ntup| tsamples |psamples| p-value |Assessment 
#=============================================================================# 
# The file file_input was rewound 1 times 
    diehard_birthdays| 0|  100|  100|0.07531570| PASSED 
# The file file_input was rewound 11 times 
     diehard_operm5| 0| 1000000|  100|0.00000000| FAILED 
# The file file_input was rewound 24 times 
    diehard_rank_32x32| 0|  40000|  100|0.00047786| WEAK 
# The file file_input was rewound 30 times 
    diehard_rank_6x8| 0| 100000|  100|0.38082242| PASSED 
# The file file_input was rewound 32 times 
    diehard_bitstream| 0| 2097152|  100|0.56232583| PASSED 
# The file file_input was rewound 53 times 
     diehard_opso| 0| 2097152|  100|0.83072458| PASSED 

我不知道究竟你有多少样本需要得到“更好”的结果...但失败教训只有250万的数字看起来像他们预计。

一些试验后,虽然,这似乎是试验开始用〜随机二进制数据的120MB传递:

 
$ dd if=/dev/urandom of=/tmp/random bs=4096 count=30000 
30000+0 records in 
30000+0 records out 
122880000 bytes transferred in 10.873818 secs (11300538 bytes/sec) 
$ du -sh /tmp/random 
117M /tmp/random 
$ dieharder -a -g 201 -f /tmp/random 
#=============================================================================# 
#   dieharder version 3.31.1 Copyright 2003 Robert G. Brown   # 
#=============================================================================# 
    rng_name |   filename    |rands/second| 
file_input_raw|      /tmp/random| 1.11e+07 | 
#=============================================================================# 
     test_name |ntup| tsamples |psamples| p-value |Assessment 
#=============================================================================# 
    diehard_birthdays| 0|  100|  100|0.71230346| PASSED 
# The file file_input_raw was rewound 3 times 
     diehard_operm5| 0| 1000000|  100|0.62093817| PASSED 
# The file file_input_raw was rewound 7 times 
    diehard_rank_32x32| 0|  40000|  100|0.02228171| PASSED 
# The file file_input_raw was rewound 9 times 
    diehard_rank_6x8| 0| 100000|  100|0.20698623| PASSED 
# The file file_input_raw was rewound 10 times 
    diehard_bitstream| 0| 2097152|  100|0.55567887| PASSED 
# The file file_input_raw was rewound 17 times 
     diehard_opso| 0| 2097152|  100|0.20799917| PASSED 

相当于122,880,000/4 = 30,720,000 - 所以约31M的整数。