播种和随机数生成

时间:2013-09-19 13:59:18

标签: c

我试图理解c中的随机生成函数。

对于我读到的函数返回的随机数取决于其初始值, 称为种子,每次运行程序都保持不变。这意味着程序生成的随机数序列在程序的每次运行中都是完全相同的。

所以这是通过使用另一个函数 - srand(种子)来解决的 - 它将在每次运行时使用不同的种子值,每次运行时会导致一组不同的随机值。并且可以使用任意值对该随机数生成器进行播种,可以使用系统时钟。总结如下: 时间用作种子值。

因此,在实现srand(种子)函数之后,生成reallt的随机数运行良好,但是 - 我不明白的是种子值始终是相同的。我认为关于播种随机数生成器的整个想法是每次程序执行时都使用新的种子值。但是在Eclipse的控制台窗口中,种子值似乎每次都是相同的,我。即4071056,4071056,4071056,4071056,4071056,4071056

和例如生成的随机数:1,6,5,5,1,4

http://www.cprogramming.com/tutorial/random.html

获取信息

编辑: *想想我现在明白了。在java中,它将是int和void之间的失配错误,

int t = srand(time(NULL));
printf("seed value: %d \n", t);
int rand_nmbr = (rand() % 6 + 1);
printf("dice face: %d ", rand_nmbr);

2 个答案:

答案 0 :(得分:4)

srand不会返回值;它的原型是

void srand(unsigned int seed);

srand的(不存在的)结果分配给t是编码错误;你只是在打印垃圾。

如果要查看种子使用的实际值

time_t t;
time(&t);
srand(t);

答案 1 :(得分:0)

srand()函数属于void类型,不返回任何内容。您的编译器应该为此

提供错误
[Error] void value not ignored as it ought to be  

通过将void函数分配给变量来调用它是错误的。