在.NET 中強制浮點計算以獲得確定性結果
在.NET 中追求跨機器的一致結果的推動下,開發人員努力解決以下問題面對浮點決定論的挑戰。如果沒有像 Java 的 fpstrict 這樣的內建解決方案,這個問題似乎是無法克服的。雖然有些人訴諸於繁瑣的定點數學,但有些人則探索了明確轉換的潛力。
如 CLR 工程師 David Notario 所建議的,在每個浮點運算後插入明確轉換可能會導致可預測的行為。然而,Eric Lippert 警告說,C# 編譯器只是向運行時提供「提示」以啟用縮小範圍。目前尚不清楚此提示是否會轉換為必要的 IL 轉換。
深入研究 C# 規範和 CLR 規範,我們確認:
儘管如此,僅明確轉換不足以保證跨機器的可重複性。 CLR 可能允許在中間運算期間將結果儲存在更高精度的 FPU 暫存器中。分配給靜態欄位或陣列元素也可能會強制截斷。
其他因素(例如 FPU 設定)仍可能會引入變化。為了確保真正可重複的算術,建議開發人員考慮使用整數。
以上是我們如何在 .NET 中實現確定性浮點結果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!