c#浮点算术:为什么精确
> 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 outputs "false" } }</code>
该程序令人惊讶地输出“ false”,即使f1
(0.09100)在逻辑上应该大于f2
>(0.0999.999999)。这是由于浮点表示的固有局限性。
>浮点类型,例如float
(C#中的32位)的精度有限。 它们只能准确地表示有限数量的十进制数字(float
>约为7个)。 涉及浮点数的计算引入了舍入误差,这些错误会像观察到的那样累积并可能导致差异。 在这种情况下,在计算和存储期间的舍入错误导致它们被认为是相等的,甚至由于这些累积的错误,f1
甚至略小。
f2
为了全面了解浮点精度及其含义,请咨询确定的资源:“每个计算机科学家对浮点算术都应了解的知识。”f1
>
以上是为什么0.09f * 100F似乎不超过C#中的0.09f * 99.999999f?的详细内容。更多信息请关注PHP中文网其他相关文章!