浮点比较具体

时间:2015-07-22 20:36:41

标签: c++ floating-accuracy

我有一个关于浮点比较的具体问题。我知道由于精度问题,不建议使用==比较,但在这个特定情况下,我想知道在所有情况下/编译器中,这个陈述是否适用?

float a = 1.02f;
float b = 1.02f;

if(a == b)
{
   print(true);
}
else
{
   print(false);
}

换句话说,如果我准确地指定浮点数,没有加法,减法,降级或升级,这总是适用吗?

1 个答案:

答案 0 :(得分:3)

是的,编译器应该一致地转换与相同值相同的浮点常量 - 如果不是,它是编译器中的错误[当然这不是不可能的]。但是,只要对值进行任何操作(例如从包含cin的文件中读取)或进行简单的数学运算(添加1.0,然后减去1.0),就不能保证该值不相同更长的时间。

正如所指出的,价值"非数字"或" NaN"保证永远不会等于任何东西,除了!=之外的所有比较都将是false,无论它与什么相比 - 这都是浮点规范的一部分。但是所有其他常量,只要你只是使用常量来赋值给变量,它应该在整个代码中保持不变。

当然,你不能依赖于两个不同的编译器来自相同源代码的相同精确值[他们会多次,但有时他们只会对最后一位做一些不同的舍入,或类似的东西导致差异]