给定一个在 1 到 10 范围内均匀生成随机整数的函数,如何编写一个在 1 到 200 范围内均匀生成随机整数的函数?
最佳答案
让u()=uniform(1,10)
,你可以写你的新随机变量`
v() = 10*(u()-1) + u() + 100*I[u()>5]
请注意,您需要对统一函数进行三次调用,不过第三次可以是 bool 变量。这里我用作指标函数
I[x] = x ? 1 : 0 // if x is true then 1 else 0.
代替 u()>5
,您可以等效地定义 u()%2==0
(u 是偶数)。您可以将 200 个不同的值视为 10 * 10 * 2
,这需要对底层统一函数进行三次调用,即使第三次调用仅用作二进制值。
这是一个awk
实现和直方图测试
awk 'function u() {return int(1+rand()*10)}
BEGIN {srand(); trials=100000;
for(i=1;i<=trials;i++) v[10*(u()-1)+u()+100*(u()%2)]++;
for(k in v) print k, v[k], (v[k]-trials/200)^2}' | sort -k3nr
最后一列表示理想分布之间的差异,总和或最大值都可以作为适应度值。有更复杂的测试、卡方等用于更复杂的分析。
关于c - 如何将随机整数的范围从1-10扩大到1-200,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43056269/