c中的种子随机数

时间:2014-08-11 01:44:01

标签: c random random-seed

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

以下是我所谈论的网站示例:

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

2 个答案:

答案 0 :(得分:5)

srand(time(NULL))足以满足一般基本用途。它的缺点是:

  • 它不适合加密,因为攻击者可以预测伪随机序列。密码学中使用的随机数必须是不可预测的。
  • 如果您快速连续多次运行程序,RNG将以相同或相似的值播种(因为当前时间没有太大变化),因此您可能会得到类似的伪 - 每次随机序列。
  • 如果您使用rand生成很多随机数,您很可能会发现他们的统计分布不均匀。如果您正在执行Monte Carlo模拟等操作,这一点非常重要。

有更复杂的RNG库可供加密和统计使用。

答案 1 :(得分:0)

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

randomize () ; 

m = random(your limit); 
printf("%d", m);// dont forget to include stdlib
相关问题