Tar*_*rta 1 c++ random floating-point visual-studio-2013
我知道这个问题有很多重复,但我的问题是不同的.我想要做的是在[-0.5,0.5]范围内生成一个简单的随机浮点数.我一直在使用的是这个链接中表达的公式:
我需要两个不同的随机浮点数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))));
Run Code Online (Sandbox Code Playgroud)
现在,我的问题很奇怪,因为当我尝试调试代码时,jitter_dx
似乎总是相同(或略有不同),jitter_dy
而是随机生成.在此,我给你带来的价值jitter_dx
,并jitter_dy
在10个不同的调试会话:
0.213156521,0.123004854
0.215659022,0.323389411
0.216849267,0259575188
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))
依赖于一种非常可预测的时间方式,从某种意义上来说,时间的变化很小(与小时相比,时间在00:00:00之间) 1970年1月1日的UTC和2038年1月19日的UTC时间03:14:07将导致非常相似的结果序列.
如果你坚持使用rand
,丢弃它产生的前几百或一千个值.然后结果将至少看起来更好(虽然仍然很糟糕).
你真正应该做的是为你的应用程序使用现代<random>
(或者如果你不能使用C++ 11的boost.random)工具std::uniform_real_distribution
.
有关详细信息,这是一个有趣的手表.
归档时间: |
|
查看次数: |
334 次 |
最近记录: |