Zai*_*aid 14 random perl bigint
我有一个组合学问题,我希望能够在0和一个大整数之间随机选择一个整数.
现在对于常规整数,我通常会写一些类似的东西int rand 500;并完成它.
但对于大整数来说,它看起来rand并不适合这个.
使用以下代码,我运行了200万次调用的模拟rand $bigint:
$ perl -Mbigint -E 'say int rand 1230138339199329632554990773929330319360000000 for 1 .. 2e6' > rand.txt
Run Code Online (Sandbox Code Playgroud)
结果集的分布远非理想:
因此,该过程永远无法选择一个类似的数字999,或者5e+020,这使得这种方法不适合我想要做的事情.
看起来这与任意精度有关rand,在测试过程中它永远不会超过15位数:
$ perl -E 'printf "%.66g", rand'
0.307037353515625
Run Code Online (Sandbox Code Playgroud)
我最初的想法是,可能有一种方法可以影响精度rand,但感觉就像是一个更大问题的创可贴(即无法rand处理大整数).
无论如何,我希望有人之前走过这条路,并知道如何纠正这种情况.
(转自我的评论)
更理论化的方法是使用多次调用PRNG来为您的数字创建足够的随机位进行采样.如果某个PRNG产生的比特数不等于下面所述的比特数,则必须小心!
n_needed_bitsn_bits_prngneeded_prng_samples = ceil(n_needed_bits / n_bits_prng)needed_prng_samples(调用PRNG)次并连接所有获得的位n_possible-sample-numbers-of-full-concatenation / n_possible-sample-numbers-within-range| 归档时间: |
|
| 查看次数: |
314 次 |
| 最近记录: |