gpt4 book ai didi

c++ - 在 C++ 中生成随机 float 不起作用(Visual Studio 2013)

转载 作者:行者123 更新时间:2023-11-30 00:48:24 26 4
gpt4 key购买 nike

我知道这个问题有很多重复,但我的问题不同。我想要做的是在 [-0.5, 0.5] 范围内生成一个简单的随机 float 。我一直在使用的是这个链接中表达的公式:

C++ random float number generation

我需要两个不同的随机 float jitter_dxjitter_dy。根据上面链接的公式我有:

float jitter_dx = -0.5f + static_cast <float> (rand()) / (static_cast <float> (RAND_MAX / (0.5f - (-0.5f))));
float jitter_dy = -0.5f + static_cast <float> (rand()) / (static_cast <float> (RAND_MAX / (0.5f - (-0.5f))));

现在,我的问题很奇怪,因为当我尝试调试代码时,jitter_dx 似乎总是相同(或略有不同),而 jitter_dy 是随机生成的。我特此为您提供 10 个不同调试 session 期间 jitter_dxjitter_dy 的值:

0.213156521,0.123004854

0.215659022,0.323389411

0.216849267,0.259575188

0.217856407,-0.460295409

0.218955040,0.147907972

0.220358908,-0.259910882

0.221335471,0.0202490091

0.224143207,0.204702914

0.225333393,0.140888691

如您所见,jitter_dx 始终(几乎)相同。两个值都是一个接一个计算的,中间没有任何代码。你能帮我找到问题吗?提前致谢。

最佳答案

如果我没记错的话,MSVC 对 rand 的实现产生的序列共同后srand(time(NULL))以一种非常可预测的方式取决于时间,从某种意义上说,时间上的微小变化(与 1970 年 1 月 1 日 00:00:00 UTC 和 1 月 19 日 03:14:07 UTC 之间的时间相比,小到小) 2038) 将导致非常相似的结果序列。

如果你坚持使用rand , 丢弃它产生的前几百或几千个值。那么结果至少看起来会更好(但仍然很糟糕)。

您真正应该做的是使用现代 <random> (或者 boost.random 如果你不能使用 C++11)设施,为你的应用程序 std::uniform_real_distribution .

欲了解更多信息,this是一 block 有趣的 watch 。

关于c++ - 在 C++ 中生成随机 float 不起作用(Visual Studio 2013),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31560322/

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