gpt4 book ai didi

c - C 中的简单随机数生成器不起作用

转载 作者:太空宇宙 更新时间:2023-11-04 01:38:18 24 4
gpt4 key购买 nike

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

int main(int argc, char** argv) {


srand(time(NULL));
int r = rand();

printf("%d\n", r);

return (EXIT_SUCCESS);
}

当我在几秒钟内重复运行此代码片段时,我得到越来越多的数字序列,例如 213252683、213975384、214193875、214445980。在我看来,我只是在打印系统时间 -当我添加 printf("%d\n", time(NULL)) 行时,这个假设似乎得到了证实;到代码。我究竟做错了什么?我在 Mac OS X 10.6.1 (Snow Leopard) 上运行,但我只使用标准库函数,所以应该没有什么区别。谢谢!

最佳答案

伪随机数是作为从初始种子派生的混沌序列生成的。 srand 通过设置这个种子来初始化随机性。显然,序列中的第一个随机数就是种子本身 - 这是您设置的 time() 值。

这就是为什么生成随机序列的正确方法是在程序开始时只调用一次srand(),然后只调用rand()(好吧,也许直到序列开始循环,这不应该发生得太快,但这取决于生成函数)。如您所见,过于频繁地调用 srand() 会降低随机性。

关于c - C 中的简单随机数生成器不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10467161/

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