c - 如何将随机整数的范围从1-10扩大到1-200

标签 c random numbers generator

给定一个在 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/

相关文章:

c - 在内存中使用位域的缺点

c - 在 'c' 程序中使用 gcc/g++ 在 stdc++ 中编译时出现问题

c - 打印两个值中的最高值而不使用 if 语句

html - 随机图片-如何添加链接?

python - 在 Python 中绘制随机数

javascript - 整数的 localeCompare

c - 从函数获取结构输入

python - 在 Python 中模拟滚动 2 个骰子

java随机字符串生成和生日悖论

java - 有没有更好的方法来检查字符串中是否有数字?