微调==运算符以匹配双精度

时间:2011-10-06 11:53:46

标签: c++ operators double

在我的代码中有一个我正在计算的参数。在许多测试运行期间,此参数应为0.由于参数是通过多次加法和减法计算的,因此它不完全为0但小于10 ^ -10。目前我正在使用:

double tol = pow(10,-10);
if (fabs(delta_U) < tol)){//whatever
}

有更优雅的方式吗?

4 个答案:

答案 0 :(得分:4)

看起来很好。您可以直接编写公差,而不是使用pow计算公差。

double tol = 1e-10;

答案 1 :(得分:1)

您可以用科学记数法指定浮点数:

if (fabs(delta_U) < 1e-10)
{
   //whatever
}

答案 2 :(得分:1)

jpalecek是正确的 - 保存常数的计算。

我不知道计算的性质,但你可能

  • 通过修改计算和运算符的顺序来减少错误
  • 可能使计算使用整数

答案 3 :(得分:1)

将其包裹在一个函数中,以便更清楚您要执行的操作:

if (near_zero(delta_U))
{
   // ...
}

其中:

inline bool near_zero(double d)
{
   return fabs(d) < 1e-10;
}