首页 >后端开发 >C++ >为什么C#中的浮点计算不精确?

为什么C#中的浮点计算不精确?

Mary-Kate Olsen
Mary-Kate Olsen原创
2025-01-31 04:18:08731浏览

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