1

我目前正在尝试自学 C 编程。我一直在学习随机数。我访问的许多网站都使用 time() 函数作为播种随机数生成器的方法。但是我读过的许多帖子和网站都说使用系统时钟作为产生随机数的方法是有缺陷的。我的问题是“我究竟应该使用什么来生成真正的随机数?我应该只用算术操作数字还是有别的东西?具体来说,我正在寻找程序员遵循以生成随机数的“最佳实践” c 编程语言中的数字。

这是我正在谈论的网站的示例:

http://faq.cprogramming.com/cgi-bin/smartfaq.cgi?answer=1042005782&id=1043284385

4

2 回答 2

5

srand(time(NULL))对于一般的基本用途来说已经足够了。它的缺点是:

  • 它不适合密码学,因为攻击者有可能预测伪随机序列。密码学中使用的随机数必须是不可预测的。
  • 如果您快速连续运行该程序多次,RNG 将使用相同或相似的值播种(因为当前时间没有太大变化),因此您每次都可能得到相似的伪随机序列。
  • 如果您使用 生成很多随机数rand,您可能会发现它们在统计上分布不均。如果您正在做类似蒙特卡洛模拟的事情,这可能很重要。

有更复杂的 RNG 库可用于加密和统计用途。

于 2014-08-11T02:05:35.320 回答
0

如果您想要一个随机数,请使用:

randomize () ; 

m = random(your limit); 
printf("%d", m);// dont forget to include stdlib
于 2014-08-11T05:06:45.130 回答