我目前正在尝试自学 C 编程。我一直致力于学习随机数。我访问的许多网站都使用 time() 函数作为随机数生成器的播种方法。但我读过的许多帖子和网站都说使用系统时钟作为生成随机数的方法是有缺陷的。我的问题是“我到底应该使用什么来生成真正的随机数?我应该用算术来操纵数字还是还有其他东西?具体来说,我正在寻找程序员遵循的生成随机数的“最佳实践” C 编程语言中的数字。
这是我正在谈论的网站的示例:
srand(time(NULL))
对于一般的基本使用来说已经足够了。其缺点是:
- 它不适合密码学,因为攻击者有可能预测伪随机序列。密码学中使用的随机数需要真正不可预测。
- 如果您快速连续运行该程序多次,RNG 将使用相同或相似的值作为种子(因为当前时间没有太大变化),因此您每次都可能获得相似的伪随机序列。
- 如果你生成很多随机数
rand
,您可能会发现它们在统计上分布不均匀。如果您正在做类似的事情,这可能很重要蒙特卡洛 https://en.wikipedia.org/wiki/Monte_Carlo_method模拟。
有更复杂的 RNG 库可用于加密和统计用途。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)