如果我運行一個複雜的計算Windows下涉及.NET的System.Double
(x86和x64),然後在Mono(LINUX,UNIX,等等),我是絕對保證得到準確同樣的結果在所有情況下,或者規範是否允許在計算中有一些餘地?.NET是獨立於平臺/架構的「雙重」算法嗎?
13
A
回答
14
5
不,它不一樣。它可以編譯成x87或SSE指令,其工作方式不同(例如關於denorm支持)。我沒有辦法強制.net使用可重現的浮點數學。
有一些替代品,但個個都是緩慢的,有些是大量的工作:
- 實現自己的浮點/定點數字。
- 32位固定不太難編碼。但是他們有限的範圍和精度使他們很難合作。
Log
和Sqrt
會很慢。如果你想,我可以挖出我未完成的代碼。 - 64位定點更適合使用。但是你不能以字節碼的高性能方式輕鬆實現它們,因爲一些中間值是CLR不支持的96-128位。
- 浮點數(我會研究32位尾數和16位指數)很好用,但很難實現。既然爲了避免精度損失,你需要一個快速的方法來找到最高的非零位。 C#/ .net中沒有BitScanForward/Reverse內部函數。
- 32位固定不太難編碼。但是他們有限的範圍和精度使他們很難合作。
- 將所有的數學代碼移動到本地庫中,因爲從我讀的內容可以強制大多數C++編譯器創建可重現的浮點代碼。
Decimal
在軟件中實現,因此也可能重現,但它也不是很快。
0
我不這麼認爲。這樣的短語爲:
內部浮點 表示的大小是依賴於實現的,可以變化,並應具有精度至少一樣大的 變量或表達式被表示
和:
該設計允許CLI選擇浮點數的平臺特定高性能表示,直到它們被放置在存儲器中ocations。例如,它可能會將浮點變量保留在硬件寄存器中,提供比用戶要求的更高的精度。在 同時,CIL發電機可以強制操作通過 尊重的表示特定語言的規則,使用轉換指令
從MS分區第12.1.3我會傾向於表明可能發生整差異如果所有操作發生在內部表示中
相關問題
- 1. 獨立於平臺的時間計算
- 2. Eclipse平臺是獨立的嗎?
- 3. .winmd文件平臺是獨立的嗎?
- 4. 是Runtime.getRuntime()。exec()平臺獨立的嗎?
- 5. 是Javac是獨立於平臺
- 6. 平臺獨立流
- 7. 獨立於平臺的屏保與Qt
- 8. 獨立於平臺的付費安裝
- 9. Python中的SFTP? (獨立於平臺)
- 10. #ifdef用CMake獨立於平臺的DEBUG
- 11. 獨立於平臺的/ dev/C++中
- 12. 如何讓maven構建平臺獨立?
- 13. JavaFX的默認字體平臺是獨立的嗎?
- 14. sqlite3數據庫是平臺獨立的嗎?
- 15. 目標文件平臺是獨立的嗎?
- 16. GenericPortlet - FileUpload平臺獨立
- 17. 什麼是獨立於平臺的訪問SBO的方式?
- 18. 在獨立於平臺的設計中傳遞特定於平臺的數據?
- 19. Ruby的Marshall格式架構和Ruby版本是獨立的嗎?
- 20. 獨立於C數學庫和平臺獨立的Python數學庫?
- 21. 平臺獨立的eclipse設置
- 22. 架構決策:QT還是Eclipse平臺?
- 23. 在Jenkins中運行Perl/Python/Ruby腳本有獨立於平臺的方式嗎?
- 24. 獨立於平臺的版本和〜/的.config
- 25. 爲什麼Java平臺在理論和平臺上獨立於實踐?
- 26. 以獨立於平臺的方式從IP地址查找MacAddress
- 27. 創建獨立於平臺的Web服務與Visual Studio
- 28. 寫作BMP文件(獨立平臺)
- 29. 託管模塊和平臺獨立
- 30. 獨立模擬目錄樹平臺
請注意,結果*始終保證符合IEEE-754規範,但該規範允許一定的餘地(例如,允許結果比指定的更精確最小精度)。 – LukeH 2011-02-16 14:44:09