gpt4 book ai didi

c++ - 使用 32 位 Mersenne Twister 生成 64 位值

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:43:44 24 4
gpt4 key购买 nike

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

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

最佳答案

为此,我添加了一个您未提及的假设:我假设您每加倍随机抽取一次。显然,您可以通过抽取两次来获得两倍的随机性。

第一个问题实际上是“32 位伪随机性是否对我的光线追踪器具有足够的随机性”。我猜是的。大多数光线追踪器只发射几百万条光线,因此您不会注意到只有 40 亿比特的伪随机性。

第二个问题是“我可以在我关心的 double 值域中分布伪随机性吗?”同样,我的猜测是肯定的。如果您在 90 度场中发射光线,则一次伪随机抽取有 40 亿种可能的结果。从角度来看,通过高倍镜观察的狙击手看到的角度精度比那些伪随机 vector 之间的平均差异低数百万倍。

综上所述,分析您的代码。我给出 99.9998% 的机会你的光线跟踪代码本身比伪随机生成花费的时间,除非你的场景都由单个非反射球体组成

关于c++ - 使用 32 位 Mersenne Twister 生成 64 位值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18806973/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com