gpt4 book ai didi

c++ - srand(1) 和 srand(0) 有什么区别

转载 作者:IT老高 更新时间:2023-10-28 22:00:54 26 4
gpt4 key购买 nike

我刚刚发现 srand(1) 将 C(++) 的 PRNG 重置为调用 srand 之前的状态(如reference)。但是,种子 0 似乎也这样做,或者任何调用 srand 之前的状态似乎使用种子 0。这两个调用有什么区别,或者它们做同样事情的原因是什么?

例如此代码(execute on Ideone)

#include <stdio.h>
#include <stdlib.h>

int main() {
for (int seed = 0; seed < 4; seed++ ) {
printf( "Seed %d:", seed);
srand( seed );
for(int i = 0; i < 5; i++ )
printf( " %10d", rand() );
printf( "\n");
}
return 0;
}

返回

Seed 0:    1804289383     846930886    1681692777    1714636915    1957747793
Seed 1: 1804289383 846930886 1681692777 1714636915 1957747793
Seed 2: 1505335290 1738766719 190686788 260874575 747983061
Seed 3: 1205554746 483147985 844158168 953350440 612121425

最佳答案

glibc 是如何做到的:

around line 181 of glibc/stdlib/random_r.c, inside function __srandom_r

  /* We must make sure the seed is not 0.  Take arbitrarily 1 in this case.  */
if (seed == 0)
seed = 1;

但这就是 glibc 的工作方式。这取决于 C 标准库的实现。

关于c++ - srand(1) 和 srand(0) 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8049556/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com