我有一个关于浮点比较的具体问题。我知道由于精度问题,不建议使用 == 比较,但在这种特定情况下,我想知道在所有情况/编译器中,此语句是否都成立?
float a = 1.02f;
float b = 1.02f;
if(a == b)
{
print(true);
}
else
{
print(false);
}
换句话说,如果我精确地分配浮点数,不进行加法、减法、降级或升级,这将永远成立吗?
是的,编译器应该一致地转换与相同值相同的浮点常量 - 如果不是,那就是编译器中的错误[当然这并非不可能]。但是,一旦您对该值执行任何其他操作(例如从包含以下内容的文件中读取它)cin
)或进行简单的数学计算(加 1.0,然后减 1.0),该值不再保证相同。
如前所述,值“Not A Number”或“NaN”保证永远不等于任何值,并且除!=
将false
,无论与什么进行比较 - 这是浮点规范的一部分。但所有其他常量,只要您只是使用常量分配给变量,它就应该在整个代码中保持不变。
当然,您不能依赖两个不同的编译器从相同的源代码中得出相同的精确值[很多时候它们会这样做,但有时它们只是对最后一位进行一些不同的舍入,或者类似的操作造成差异]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)