根据this Boost documentation page,Mersenne Twister的64位变体比它的32位变体慢得多(这是有意义的)。据我了解,C ++ 11中引入的许多功能,包括随机数生成,在标准库中基本上都是Boost。这让我相信标准C ++中的32位MT性能也更好。
我正在写一个光线跟踪器(主要是为了好玩),速度是我最关心的问题之一。基本上所有数值都表示为双精度浮点数。我的问题是,由于32位MT速度要快得多,我可以用它来生成双打吗?我可以期待哪些缺点(精度损失,性能等)?
答案 0 :(得分:2)
为此,我添加了一个你没有提到的假设:我假设你每次做一次随机抽奖。显然,你可以通过两次抽奖获得两倍的随机性。
第一个问题是“32比特的伪随机性对于我的光线跟踪器是否具有足够的随机性。”我的猜测是肯定的。大多数光线追踪者只拍摄了几百万条光线,所以你不会注意到只有40亿比特的伪随机性。
第二个问题是“我可以在我关心的双值域中分配伪随机性。”再一次,我的猜测是肯定的。如果你在90度的场地中射击射线,并且一次伪随机抽取可能有40亿个结果。从透视角度来看,通过高功率范围观察的狙击手看到的角度精度比那些伪随机向量之间的平均差异要小数百万倍。
所有这些,描述您的代码。除非您的场景全部由单个非反射球体组成,否则我的光线跟踪代码本身会比伪随机生成长<99>以上<99>有机会