浮点数相等的意外结果问题不是为什么0.1+0.9不等于1.0。它对equals的行为不同。有人可以解释为什么以下示例的工作方式不同floatq=0.1f;浮动w=0.9f;浮点数=q+w;q+w=??=1.0f;//假和==1.0f;//True为什么operator==的工作方式不同?问题是由于中间计算以更高的精度执行,并且float何时变为float精度的规则在每种情况下都不同。根据文档默认情况下,在x86架构的代码中,编译器使用协处理器的80位寄存器来保存浮点计算的中间结果。...编译器舍入float类型的变量,为赋值和强制转换提供正确的精度,并且在将参数传递给函数时“floatsumm=q+w是一个赋值,因此舍入到最接近的浮点数,在示例中为1。q+w=??=1.0f既不是q+w=??=1.0f,也不是函数调用,所以加法的结果仍然是一个扩展精度的浮点数,接近但不等于1。进一步理解IL:summ存储在float32类型的局部变量中IL_000d:ldloc.0IL_000e:ldloc.1IL_000f:addIL_0010:stloc.2q+w=??=1.0f在q+w=??=1.0f处使用的结果不是;它是直接使用CompareIL_0011:ldloc.0IL_0012:ldloc.1IL_0013:addIL_0014:ldc.r41.IL_0019:ceq推测是本地存储summ意味着它失去了足够的精度以至于它变成等于1.0f以上是C#学习教程:浮点数意想不到的结果等于分享的全部内容,如果对你有用,需要了解更多C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
