【发布时间】:2017-08-20 11:28:26
【问题描述】:
我的用例是:我需要随机数,但仅用于图形(不适用于密码学)。我需要能够为 2 次渲染/运行获得相同的图像(结果)。例如,使用time() 作为种子不会为下一次运行创建相同的结果。所以我需要一个常量种子。
Mersenne Twister 的文档说它不喜欢 0 作为种子,它也不喜欢某些位组合。对于这种情况,据说它最多需要 800000 次调用,直到它再次提供好的随机数。出于速度原因,我不想花费 800000 次通话的开销。 理想情况下,我需要一些可以直接用作种子的不错且值得信赖的值。
【问题讨论】:
-
你试过
4吗? -
测试时真的需要真正随机的结果吗?
-
为什么两次运行需要相同的结果?如果答案是“可重复性”,那么您应该从标准来源(如时间戳)获取种子并记录它,并使其可选地作为命令行参数覆盖。这是例如使用的方法。 gtest.
-
嗨 Nir,我根据“随机”位置发射粒子。我需要相同的结果,否则我会得到动画闪烁(粒子会从图像改变位置到下一个图像)。想象一个相机飞过。我还将检查使用 3d 位置作为种子,因为这看起来更稳定。最后但并非最不重要的一点是,当场景中的对象也被动画化时,它是最佳支持。如果障碍物移动,并且我的粒子被阻挡,那么稍后拍摄的所有粒子都会脱轨(闪烁)。我很可能会预先计算随机数序列以防止这种情况发生。
标签: c++ c++11 random random-seed mersenne-twister