6

根据此 Boost 文档页面,Mersenne Twister 的 64 位变体比其 32 位版本慢得多(这是有道理的)。据我了解,C++11中引入的很多特性,包括随机数生成,基本上都是标准库中的Boost。这让我相信标准 C++ 中的 32 位 MT 性能也更好。

我正在写一个光线追踪器(主要是为了好玩),速度是我最关心的问题之一。基本上所有数值都表示为双精度浮点数。我的问题是,由于 32 位 MT 的速度要快得多,我可以用它来生成双精度数吗?我可以预期哪些缺点(精度损失、性能等)?

4

1 回答 1

2

为此,我添加了一个你没有提到的假设:我假设你每双打一次随机抽奖。显然,您可以通过两次抽奖获得两倍的随机性。

第一个问题真的是“32 位的伪随机性是否对我的光线追踪器具有足够的随机性”。我的猜测是肯定的。大多数光线追踪器只射出几百万条光线,所以你不会注意到只有 40 亿比特的伪随机性。

第二个问题是“我可以在我关心的双值域中分配伪随机性吗?” 同样,我的猜测是肯定的。如果你在 90 度的视野中拍摄光线,并且一次伪随机抽取有 40 亿个可能的结果。从透视角度来看,狙击手通过高倍瞄准镜看到的角度精度比这些伪随机向量之间的平均差异低数百万倍。

话虽如此,请分析您的代码。除非你的场景都由单个非反射球体组成,否则我有 99.9998% 的机会让你的光线跟踪代码本身比伪随机生成花费更长的时间

于 2013-09-14T22:43:31.910 回答