问题不在于为什么0.1 + 0.9
不等于1.0
。这是关于平等者的不同行为。
有人可以解释为什么下面的示例的工作方式不同。
float q = 0.1f;
float w = 0.9f;
float summ = q + w;
q + w == 1.0f; // False
summ == 1.0f; // True
为什么选择运营商==
工作方式不同吗?
问题是由于中间计算是以更高的精度执行的,以及何时舍入到的规则float
每种情况下的精度都不同。
根据the docs https://msdn.microsoft.com/en-us/library/e7s85ffb.aspx
默认情况下,在 x86 架构的代码中,编译器使用协处理器的 80 位寄存器来保存浮点计算的中间结果。
...编译器对类型变量执行舍入float
分配和转换以及参数传递给函数时达到正确的精度”
float summ = q + w
是一个赋值,因此四舍五入到最接近的float
,在本例中为 1。
q + w == 1.0f
既不是强制转换、赋值也不是函数调用,因此加法的结果仍然是扩展精度浮点数,它接近但不等于 1。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)