簡體   English   中英

使用32位Mersenne Twister生成64位值

[英]Generating 64-bit values with a 32-bit Mersenne Twister

根據Boost文檔頁面 ,Mersenne Twister的64位版本比其32位版本慢得多(這很有意義)。 據我了解,C ++ 11中引入的許多功能(包括隨機數生成)基本上都是標准庫中的Boost。 這使我相信標准C ++中的32位MT性能也更好。

我正在編寫raytracer(主要是出於娛樂目的),而速度是我主要關心的問題之一。 本質上,所有數值都表示為雙精度浮點數。 我的問題是,由於32位MT的速度要快得多,我可以用它來生成雙精度嗎? 我可以期待哪些缺點(精度損失,性能等)?

為此,我添加了一個您沒有提到的假設:我假設您每雙進行一次隨機抽獎。 顯然,您可以通過兩次平局獲得兩倍的隨機性。

第一個問題確實是“ 32位偽隨機性對於我的光線跟蹤器是否具有足夠的隨機性”。 我的猜測是。 大多數光線追蹤器僅發出幾百萬條光線,因此您不會注意到只有40億比特的偽隨機性。

第二個問題是“我是否可以在我關心的雙精度值域內分配偽隨機性”。 同樣,我的猜測是肯定的。 如果您在90度視野中拍攝光線,則一次偽隨機抽簽可能會產生40億個結果。 從透視圖上看,狙擊手在高倍鏡下觀察到的角精度比這些偽隨機向量之間的平均差小數百萬倍。

這么說,對您的代碼進行概要分析。 除非您的場景全部由單個非反射球組成,否則我有99.9998%的機會使您的光線跟蹤代碼本身花費時間比偽隨機生成的時間長得多

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM