了解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中文網其他相關文章!