给定以下具有任意值的浮点变量,在 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);
}
输出:
0 0 0
==
和 !=
在浮点类型上总是不安全的,因为它们有舍入错误。
关于c++ - 我们可以假设以下任何一对浮点算术语句总是产生相同的结果吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24943314/