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