首頁 > 後端開發 > C++ > 我們如何在 .NET 中實現確定性浮點結果?

我們如何在 .NET 中實現確定性浮點結果?

DDD
發布: 2025-01-04 10:47:41
原創
171 人瀏覽過

How Can We Achieve Deterministic Floating-Point Results in .NET?

在.NET 中強制浮點計算以獲得確定性結果

在.NET 中追求跨機器的一致結果的推動下,開發人員努力解決以下問題面對浮點決定論的挑戰。如果沒有像 Java 的 fpstrict 這樣的內建解決方案,這個問題似乎是無法克服的。雖然有些人訴諸於繁瑣的定點數學,但有些人則探索了明確轉換的潛力。

如 CLR 工程師 David Notario 所建議的,在每個浮點運算後插入明確轉換可能會導致可預測的行為。然而,Eric Lippert 警告說,C# 編譯器只是向運行時提供「提示」以啟用縮小範圍。目前尚不清楚此提示是否會轉換為必要的 IL 轉換。

深入研究 C# 規範和 CLR 規範,我們確認:

  1. C# 編譯器確實插入了一個 conv。當原始程式碼中存在明確轉換為 float 時,IL 中的 r4 操作碼。
  2. CLR 規範要求conv.r4 指令將值截斷為其原始大小。

儘管如此,僅明確轉換不足以保證跨機器的可重複性。 CLR 可能允許在中間運算期間將結果儲存在更高精度的 FPU 暫存器中。分配給靜態欄位或陣列元素也可能會強制截斷。

其他因素(例如 FPU 設定)仍可能會引入變化。為了確保真正可重複的算術,建議開發人員考慮使用整數。

以上是我們如何在 .NET 中實現確定性浮點結果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板