首頁 >後端開發 >C++ >為什麼C#中的浮點計算不精確?

為什麼C#中的浮點計算不精確?

Mary-Kate Olsen
Mary-Kate Olsen原創
2025-01-31 04:18:08720瀏覽

Why Are Floating-Point Calculations in C# Imprecise?

了解c#

中的浮點不精確

浮點算術的固有不精確通常會導致意外的結果。 考慮此C#代碼段:

<code class="language-csharp">class Program
{
    static void Main(string[] args)
    {
        float f1 = 0.09f * 100f;
        float f2 = 0.09f * 99.999999f;

        Console.WriteLine(f1 > f2); // Surprisingly prints "false"
    }
}</code>

輸出“ false”是違反直覺的,因為兩個計算似乎都產生9.0。這種差異來自浮點表示的局限性。

> IEEE 754標準浮點數使用有限數量的位來表示分數零件。 這意味著許多十進制值不能精確存儲;它們近似。 值

和計算結果是近似值。 這些近似雖然通常微不足道,但可能會引起意外的比較。 0.09f>

因此,直接比較平等(

)的浮點數是不可靠的。 相反,使用基於公差的比較:==

<code class="language-csharp">Console.WriteLine(Math.Abs(f1 - f2) < 0.0001); // A more robust comparison</code>
此方法檢查

之間的絕對差異是否低於預定義的閾值(在這種情況下為0.0001)。 根據您的應用程序所需的精度調整閾值。 f1 f2另外,使用

(雙精度浮點數)提供的精度高於

(單精度),從而降低了這些不准確性的可能性。 但是,即使double值也受到類似的限制,儘管誤差範圍較小。 仔細考慮精度要求對於可靠的浮點計算至關重要。

以上是為什麼C#中的浮點計算不精確?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn