【发布时间】:2014-10-03 18:42:45
【问题描述】:
我目前正在尝试自学 C 编程。我一直在学习随机数。我访问的许多网站都使用 time() 函数作为播种随机数生成器的方法。但是我读过的许多帖子和网站都说使用系统时钟作为产生随机数的方法是有缺陷的。我的问题是“我究竟应该使用什么来生成真正的随机数?我应该只用算术操作数字还是有别的东西?具体来说,我正在寻找程序员遵循以生成随机数的“最佳实践” c 编程语言中的数字。
这是我正在谈论的网站的示例:
http://faq.cprogramming.com/cgi-bin/smartfaq.cgi?answer=1042005782&id=1043284385
【问题讨论】:
-
如果您必须使用
rand(),请仔细检查此链接以了解其危害。 channel9.msdn.com/Events/GoingNative/2013/… -
如果你只是学习 c,
srand(time(NULL))就足够了。除非你需要经常调用你的程序 -
我是 C 的初学者,但我以前编程过。当我学习一门语言时,我更愿意慢慢学习并学习最佳实践。
-
@CroCo 30 分钟视频?
-
@FiddlingBits:该视频描述了
rand()的几乎所有错误,尽管它没有提到为每个随机数调用srand()的令人惊讶的频繁错误,但它提供的解决方案虽然完全正确,是 C++ 特定的,所以它对 C 项目没有太大帮助。因此,如果您使用 C 语言编写,请观看前半部分,然后获取 Mersenne twister 参考实现,并在任何具有该功能的系统或 Windows 等效系统上从/dev/random播种一次。
标签: c random random-seed