问题非常简单:考虑两个浮点数,它们可能按位不相等,但在所有可能的意义上差异都相对较小。我们还假设他们的楼层之间的差异小于一些相对较小的 epsilon(0.01 应该足够了)。他们的楼层是否按位相等(即在运算符== 方面相等)?
例如,下面的代码是否会true
一直返回:
bool areRoundedFloatsEqual(float lhs, float rhs) {
if (lhs > 0 && rhs > 0 && fabs(lhs - rhs) < 0.01) {
lhs = std::floor(lhs);
rhs = std::floor(rhs);
if (fabs(lhs - rhs) < 0.5)
return lhs == rhs;
}
return true;
}
事实上,我对两个问题感兴趣:
- 现实生活中会发生什么?
- 标准对此有何评论?
UPD
我用描述替换了不正确的示例。(感谢@MarcGlisse 和
@KevinBallard 指出错误。)
UPD 2 这是很好地涵盖了这个问题的主题:Floor() and ceil() Representable result of floor() and ceil()