上學期我們不得不爲學校的課程開發光線跟蹤器。學校正在完成,我試圖用它來擺弄一下。Java raytracing float vs double
我想看看如果將所有浮點計算從雙精度浮點計算更改爲浮點精度(所有計算都使用雙精度來完成),會發生什麼變化。所以我改變了每個變量的類型爲float,並簡單地將從Math方法返回的每個double轉換爲float。在幾個場景中測試我的光線追蹤器顯示出相當不錯的性能提升。
在網上搜索我發現了各種原因,爲什麼float會更快,但也有人說double可能在64位環境中更快,甚至更快。事情是,我在64位環境和JVM中運行。這種性能提高的原因是什麼?
現在,我正在閱讀PBRT書,並計劃在此之後重寫一個光線跟蹤器。爲所有浮點計算選擇浮點會造成什麼問題?在我的測試過程中,我沒有注意到,但是對於某些場景來說,較低的精度可能會(交叉點測試看起來像是可能導致問題的地方)?或者可能是一種折衷,比如對關鍵測試使用雙精度和浮點精度較低的計算?我將不得不使用其他數學庫來擺脫鑄造,我會採取浮動方式。
我相信'double d = 1d'是兩條指令,而'float f = 1f'是一條指令。即使在64位機器上。使用64位JVM。 – jn1kk
「我在64位環境中運行」64位操作系統不算作64位環境。你的編譯器和其他工具(如Java中的JVM)也必須是64位的。 –
[浮點數是否比雙精度慢? 64位程序運行速度比32位程序快嗎?](http://stackoverflow.com/questions/5738448/is-float-slower-than-double-does-64-bit-program-run-faster-than-32 -bit-program) –