unj*_*nj2 1 random math coin-flipping
现在我有
return 'Heads' if Math.random() < 0.5
Run Code Online (Sandbox Code Playgroud)
有一个更好的方法吗?
谢谢
编辑:请忽略返回值,"更好"意味着准确的50-50概率.
死者总是那么简单
coin = rand(1);
在许多脚本语言中,这将为你提供0和你的arg之间的随机int,所以传递1给你0或1(头或尾).
C中的Numerical Recipes表示在重要时不要相信内置的随机数生成器.您可以将本书中显示的算法实现为函数ran1(),它声称通过所有已知的随机性统计测试(1992年),其中少于大约10 8个调用.
ran1()算法背后的基本思想是在随机数发生器的输出中添加一个shuffle,以减少低阶串行相关.他们使用了计算机程序设计第2卷第3.2-3.3节中的Bays-Durham shuffle,但我猜你也可以使用Fisher-Yates shuffle.
如果你需要更多的随机值,那么同一个文档还提供了一个生成器(ran2),它应该适用于至少10 17个值(我的猜测基于2.3 x 10 18的周期).如果线性同余生成器给你一些问题,它还提供一个函数(ran3),它使用不同的方法生成随机数.
您可以使用<0.5测试中的任何这些功能来更自信地获得统一分布.
我们向xkcd致敬:
string getHeadsOrTails {
return "heads"; //chosen by fair coin toss,
//guaranteed to be random
}
Run Code Online (Sandbox Code Playgroud)