gpt4 book ai didi

c - 使用垃圾值生成随机数或伪随机数

转载 作者:行者123 更新时间:2023-12-01 15:54:09 24 4
gpt4 key购买 nike

我遇到了使用垃圾值生成随机数的想法。在 C 中,未初始化的变量被赋予一个垃圾值(但当我在我的 geany 中尝试它时,它给出了 0)。所以如果想从 50-60 中取一个随机数。我可以取垃圾值的模数,然后将它们添加到随机数的初始限制中吗?但是未初始化的变量返回零而不是垃圾值,就像这篇文章 @ How garbage values are assigned to variables in c 中那样。

int i;
int LowerLimit=50;
int UpperLimit=60;
int RandomNumber = i%(UpperLimit-LowerLimit) + LowerLimit;

另外,如果我们使用一百个未初始化的变量来使用它们的组合来生成一个随机变量会怎么样。

最佳答案

在实践中使用未初始化的变量作为随机值是一个非常糟糕的主意。使用未初始化的值是 Undefined Behavior所以一切都可能发生,但在实践中,一个本地未初始化的变量可能具有一些可重复的值。一些编译器足够聪明,在优化时删除一些未初始化值的使用(或者相反将该值设置为常量)。这符合 C 或 C++ 标准。

最近 C++11标准为随机数定义了一个相当广泛的 API。查看 <random> C++11 标准头文件。

我的意思是,如果你打印一些未初始化的值,你可能在实践中在同一台机器上多次运行相同的程序时得到相同的值,我不称之为随机行为。当然,该行为是具体实现(并且会因系统而异;它取决于操作系统、编译器、优化标志和用户配置或环境等...) .

我建议使用一些 pseudo-random number generator (例如,参见 random(3)lrand48(3) ...)并使用一些随机输入来播种。在 Linux 上,您可以从 /dev/urandom 读取一些字节。 (仔细阅读 urandom(4) ...)或将当前时间与当前 pid(参见 time(2)getpid(2))结合以获得种子。

而且随机数意义不大,随机性在实践中很难精确定义(请教数学家,概率论专家)。

随机数确实是一个很难的课题。你可以把你的一生都花在它上面,并获得博士学位....

出于调试目的,您可能希望有一个可重现的伪随机数流。为此,请使用定义明确的种子。

如果您的问题主要取决于真正随机且不可预测的数字流(例如,如果您正在编写一个扑克网站),那么花几百欧元(或美元)购买一些硬件随机设备是值得的。

关于c - 使用垃圾值生成随机数或伪随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19604364/

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