gpt4 book ai didi

c++ - c中的伪随机函数?

转载 作者:搜寻专家 更新时间:2023-10-31 00:32:08 27 4
gpt4 key购买 nike

我正在阅读 Brian W.Kernighan 和 Dennis M.Ritchie 合着的《c 编程语言》一书。看不懂书上写的生成伪随机数的函数是这样的;

unsigned long int next = 1;

int rand(void)
{
next = next * 1103515243 + 12345;
return (unsigned int)(next / 65536) % 32768;
}

void srand(unsigned int seed)
{
next = seed;
}

我自己也试过。但我只得出以下观察结果

65536 = is the value of 16 bit unsigned + 1 bit
32768 = is the value of 16 bit signed + 1 bit

但我无法弄清楚整个过程。这是传说所写的书,我想读懂这本书。如果有人能帮助我解决这个问题,我将感到非常幸运。

最佳答案

Pseudo Random Number Generators是一个非常复杂的主题。你可以学习它多年,并获得博士学位。如评论所述,另请阅读 linear congruential generator (看起来您的代码是某些 C 标准中的示例)

在 POSIX 系统的 C 中,你有 random(3) (还有 lrand48(3) ,有点过时了);在 C++11 中你有 <random>

/65536操作可能被编译为 >>16右移 16 位。%32768操作可以是 optimized作为位掩码(与 &0x7fff 相同)保持最少 15 位。

关于c++ - c中的伪随机函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32225896/

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