繁体   English   中英

使用梅森扭曲器在C中生成随机数

[英]Random number generation in C using Mersenne twister

我想使用Mersenne twister在c中生成随机数(0到1之间)。 我的代码如下:

for (i=1; i<=10;i++){
  srand(time(NULL));
  a=rand();
  b=rand();
  c=rand();  
}

也就是说,在for循环的每次迭代中,随机数将使用当前时间进行播种,使用该种子,我将生成3个介于0和1之间的随机数。

经常重新播种RNG似乎不是一个好主意。 很有可能每次都用相同的时间戳作为种子,在这种情况下,每次循环迭代将获得相同的3个随机数。 您应该宁愿播种一次,然后使用它。

此处提供Mersenne Twister的C实现。

塞巴斯蒂安所说的是准确的,您不会注意到每次迭代之间time(NULL)值的任何差异,种子几乎总是相同的:

经常重新播种RNG似乎不是一个好主意。 很有可能每次都用相同的时间戳作为种子,在这种情况下,每次循环迭代将获得相同的3个随机数。 您应该宁愿播种一次,然后使用它。

但也许您可以尝试一下,以获得更好的结果

for (int i=1; i<=10;i++){
  srand(time(NULL)*i*17); //Or any combination of operations with 'i' included
  a = rand();
  b = rand();
  c = rand();  
}

在每次迭代中,您将获得略有不同的种子

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM