【发布时间】:2011-05-31 16:27:08
【问题描述】:
每次我开始一个新项目并且需要比较一些浮点或双精度变量时,我都会编写如下代码:
if (fabs(prev.min[i] - cur->min[i]) < 0.000001 &&
fabs(prev.max[i] - cur->max[i]) < 0.000001) {
continue;
}
然后我想摆脱这些神奇的变量 0.000001(和 0.00000000001 对于 double)和 fabs,所以我编写了一个内联函数和一些定义:
#define FLOAT_TOL 0.000001
所以我想知道是否有任何标准方法可以做到这一点?可能是一些标准的头文件? 有浮动和双重限制(最小值和最大值)也很好
【问题讨论】:
-
取决于用例,但是非常小的数字呢?您的代码将比较
1e-10和1e-15和-1e-10都相等。没有单一的“正确”方法来比较浮点数的“接近性”。 -
为什么是#define?您可以为此目的使用静态 const float。
-
我敢打赌你忘了和0比较? :)
标签: c++ floating-point floating-accuracy double-precision