问题描述
问题不是为什么 0.1 + 0.9
不等于 1.0
。它有关不同的行为等于。
有人可以解释为什么下面的例子工作不同。
float q = 0.1f;
浮点数w = 0.9f;
float summ = q + w;
q + w == 1.0f; //假
summ == 1.0f; // True
为什么operator ==
这个问题是由于中间计算是以更高的精度执行的,而这个规则是为了解决这个问题。什么时候回到 float
precision在每种情况下都是不同的。 根据
float summ = q + w
是一个赋值,因此被舍入到最近的 floa t
,在这种情况下,它是1.
q + w == 1.0f
既不是一个强制转换,赋值或函数调用,所以加法的结果仍然是一个扩展的精度浮点数,它接近但不等于1。
Question is not about why 0.1 + 0.9
is not equals 1.0
. Its about different behaviour of a equals.
Can someone explain why examples below works differently.
float q = 0.1f;
float w = 0.9f;
float summ = q + w;
q + w == 1.0f; // False
summ == 1.0f; // True
Why operator ==
works differently?
The problem is due to the fact that the intermediate calculations are being performed in a higher precision, and the rules for when to round back to float
precision are different in each case.
According to the docs
float summ = q + w
is an assignment, and hence is rounded to the nearest float
, which in this case is 1.
q + w == 1.0f
is neither a cast, assignment or function call, so the result of the addition is still an extended precision float, which is close, but not equal, to 1.
这篇关于意外的结果等于浮点数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!