gpt4 book ai didi

c++ - GLM 随机数生成器的线性度如何?

转载 作者:行者123 更新时间:2023-11-30 02:47:14 31 4
gpt4 key购买 nike

使用 GLM 0.9.5.1 我在启动时使用 glm::linearRand(-1.0f, 1.0f) 生成随机数。看起来每次我重新启动应用程序时,值总是相同的。也许我在 GLM 中遗漏了一个重新播种随机数生成器的函数?

看看这段代码:

std::cout << glm::linearRand(-1.0f, 1.0f) <<  std::endl;
std::cout << glm::linearRand(-1.0f, 1.0f) << std::endl;
std::cout << glm::linearRand(-1.0f, 1.0f) << std::endl;
std::cout << glm::linearRand(-1.0f, 1.0f) << std::endl;

0.188513
0.428694
0.372967
-0.419843

这些值始终相同。我将如何重新播种?

最佳答案

根据此处的来源:

https://github.com/Groovounet/glm/blob/master/glm/gtc/random.inl#L32

随机数生成器使用 std::rand() - 换句话说,C 运行时库的随机数生成器。实现的好坏取决于您使用的实际 C 运行时库。但它通常是为“速度”而不是“准确性”而编写的(换句话说,它可能适用于简单的游戏,但如果你想要在商业敏感环境中坚持的东西 [例如玩家赢得真钱的在线扑克],你可能想使用更好的东西)。

但是,每次运行程序时获得相同值的原因是因为 C 运行时库的默认行为是从相同的种子开始。这对于测试目的很有用,您可能希望每次运行代码时某些东西的行为都相同。在代码开头调用一次 srand(time(0)); 会根据当前时间将种子放入随机数生成器中。它并不完美,但在几分钟后它会发生很大变化,并形成相当不错的“每次都设置新的随机数”。如果你想要“更多的随机种子”,你可以使用其他方法,比如将当前时间写成一个字符串,然后用 md5 散列它,也许。

关于c++ - GLM 随机数生成器的线性度如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22884345/

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