【发布时间】:2023-03-18 09:32:01
【问题描述】:
除了是个垃圾程序员之外,我的行话还不够格。我会尽力解释我自己。
我已经使用randomlib 实现了一个 Merssene twister 随机数生成器。
诚然,我对 Visual 8 C++ 的随机数生成器的工作原理不太熟悉,但我发现我可以在 srand(time(NULL)) 中播种一次 main() 并且我可以在其他课程中安全地使用 rand()。
我拥有的 Merssene 捻线机需要创建一个对象,然后为该对象播种。
#include <RandomLib/Random.hpp>
RandomLib::Random r; // create random number object
r.Reseed(); // seed with a "unique" seed
float d = r.FloatN(); // a random in [0,1] rounded to the nearest double
如果我想在一个类中生成一个随机数,我该如何做到这一点,而不必每次都定义一个对象。我只是担心如果我使用计算机时钟,我每次运行都会使用相同的种子(每秒只会改变一次)。
我解释得对吗?
提前致谢
【问题讨论】:
-
查看文档,您应该对您拥有的
Reseed()感到满意。 randomlib.sourceforge.net/html/… -
为什么要强调“正确”?如果您不这么说,您是否认为我们会给出不正确的答案?
-
将对象作为静态成员存储在类中。这样,该类的所有对象都将使用相同的 RandomLib::Random 对象。
-
@GigaWatt 我在看
Reseed(),但它感觉不对。您是否建议每次生成随机数时都使用上面的代码? @KerrekSB 我实际上不确定我的意思是正确的...... -
@NikosChantziaras 我之前正在玩这个。但是我仍然害怕如果使用 time(0),每个唯一的类都会被相同的数字播种(我知道还有其他播种选项)