已經閱讀這question我相當肯定,一個給定的過程使用浮點算術相同的輸入(在相同的硬件,編譯相同的編譯器)應該是確定性。我正在審查一個不是這樣的案例,並試圖確定可能造成這種情況的原因。什麼可能導致一個確定性的過程產生浮點錯誤
我編譯了一個可執行文件,我給它提供了完全相同的數據,運行在一臺機器上(非多線程),但我得到的錯誤約爲3.814697265625e-06,仔細搜索後我發現實際上等於1/4^9 = 1/2^18 = 1/262144。這非常接近32位浮點數的精確度(根據維基百科約7位數)
我懷疑它與應用於代碼的優化有關。我使用的是intel C++編譯器,並且已經將浮點運算變爲快速而不是安全或嚴格。這可能會使浮點進程不確定嗎?是否有其他優化等可能導致此行爲?
編輯:由於每人的建議我重新編譯浮點炒作的代碼變得安全,現在我得到穩定的結果。這使我可以澄清這個問題 - 浮點推測實際上做了什麼,以及如何在相同的輸入應用於同一個二進制文件(即一次編譯,多次運行)時生成不同的結果?
@Ben我正在使用英特爾(R)C++ 11.0.061 [IA-32]進行編譯,並且正在使用英特爾四核處理器。
什麼處理器處理器和什麼編譯器? .. – Ben 2009-06-09 06:34:50
如果你已經找出哪個標誌導致它,爲什麼不檢查編譯器文檔? – 2009-06-09 06:51:24