我知道这个问题有很多重复之处,但是我的问题有所不同。我想做的是生成一个范围为[-0.5,0.5]的简单随机浮点数。我一直在使用的是此链接中表达的公式:
C++ random float number generation
我需要两个不同的随机浮点数jitter_dx
和jitter_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_dx
和jitter_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
总是(几乎)相同。这两个值是一个接一个地计算的,中间没有任何代码。您能帮我发现问题吗?提前致谢。 最佳答案
如果我没记错的话,在常见的rand
之后,MSVC实现srand(time(NULL))
所产生的顺序在很大程度上可预测,取决于时间,即时间的微小变化(与00:00之间的时间相比,大小一样小1970年1月1日的UTC和2038年1月19日的03:14:07 UTC)将导致非常相似的结果序列。
如果您坚持使用rand
,则丢弃它产生的前几百个或几千个值。然后结果至少看起来更好(尽管仍然很糟糕)。
您真正应该做的是为您的应用程序 <random>
使用现代的boost.random(如果不能使用C++ 11,则使用 std::uniform_real_distribution
)工具。
有关更多信息,this是有趣的手表。
关于c++ - 在C++中生成随机浮点数不起作用(Visual Studio 2013),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31560322/