在c / c++中,给定以下具有任意值的浮点变量。

float a, b, c, d;

在下面的语句中,我们可以假设它们中的任何一对总是会产生相同的结果吗?
float result_1 = a + b + c + d - c;
float result_2= a + b + c + (d - c);
float result_3 = a + b + d;

另外,是否对以下谓词有保证:
a + b - b == a

最佳答案

不,您不能假设这一点。我打破了您的所有三个示例:(Live)

#include <iostream>

int main()
{
   double a = 1, b = 1e100, c= 1e100, d= 1, c2 = .1, d2 = -.1, b2 = 1;

   std::cout << ( a + b2 + c2 + d2 - c2 == a + b2 + c2 + (d2 - c2)) << "\n"
    << ( a + b2 + c + d - c == a + b2 + d) << "\n"
    << ( a == a + b -b);
}

输出:



对于浮点类型,==!=始终不安全,因为它们具有舍入错误。

07-24 09:45
查看更多