在浮點精度方面,.NET 因未提供浮點精度而受到批評決定論,因為具有相同輸入的代碼可以在不同的機器上產生不同的結果。為了緩解這個問題,開發人員求助於使用定點數學,但這種解決方案很麻煩。
一個有趣的建議是透過將每個浮點值明確轉換為單精度或雙精度來實現確定性,使用 (float) 或 (double) 等強制轉換。 MSDN 文章支援此方法,指出明確強制轉換可以強制插入 conv.r4 或 conv.r8 指令,從而限制精確度。
然而,進一步的斷言聲稱明確強制轉換可能只是提供「提示」 」 到運行時,表明編譯器和CLR 必須合作以確保確定性。為了澄清這個問題,讓我們深入研究以下問題:
其他操作,例如分配給數組或靜態/實例字段,還可以截斷高精度模式之外的浮點值。 >由於非正規值和NaN 的處理,一致的截斷不足以保證跨機器的可重複性。 為了確保重現性,建議使用整數而不是浮點運算。
以上是明確轉換和轉換指令如何確保 .NET 中的浮點確定性?的詳細內容。更多資訊請關注PHP中文網其他相關文章!