使用' =='是否安全?运算符,以确定C ++中的双变量自初始化以来是否已更改为0.0?
出于性能原因,我想避免重新计算嵌套for循环中的值(如果已经计算过的话)。
如果认为不安全: 这是否会导致误报(即表达式返回true,尽管值不等于0.0),假阴性(即表达式返回false,尽管值确实为0.0)或两者/未确定的行为?
我正在使用C ++ - 14和GNU C ++编译器v5.4。
答案 0 :(得分:3)
在C ++中,当且仅当x == 0.
为零时,表达式x
的计算结果为真。
您可能产生假阳性或假阴性的唯一意义是:
x
是计算的结果,当理想的精确数学结果为非零时,产生零,反之亦然。换句话说,问题是x
不包含您想要的值,而不是与零比较不能正常工作。x
,比较使用浮点表达式,如x/y == 0.
中所示。 C ++允许以比标称类型更精确的方式计算表达式。当通过强制转换分配或转换值时,将丢弃此超出的精度。因此,比较可能表明表达式非零,即使将其指定给对象也会在对象中产生零。