在比较双精度数是否相等时,我们需要给出一个容差水平,因为浮点计算可能会引入错误。例如:
double x;
double y;
x = f();
y = g();
if (fabs(x-y)<epsilon) {
// they are equal!
} else {
// they are not!
}
但是,如果我只是简单地分配一个常数值,而不进行任何计算,我还需要检查 epsilon 吗?
double x = 1;
double y = 1;
if (x==y) {
// they are equal!
} else {
// no they are not!
}
==
比较够好吗?还是我需要再做fabs(x-y)<epsilon
一次?分配时是否可能引入错误?我是不是太偏执了?
铸造 ( double x = static_cast<double>(100)
) 怎么样?这也会引入浮点错误吗?
我在 Linux 上使用 C++,但如果它因语言而异,我也想理解这一点。