如何设置方程式的数学精度?

How to set mathematical precision in equations?

如何为以下代码设置数学精度?

int calc(double a, double b)

  if(a == b){
    printf("= ");
  }else if(a < b){
    printf("< ");
  }else{
    printf("> ");
}
 }

其中 a 和 b 可以是以下之一:

double tr = p1 + p2 + p3;
double ob = (p1 + p2) * 2;
double sq = p1 * 4;
double s = (p1 + p2 + p3)/2;
double trS = sqrt(s * (s - p1) * (s - p2) * (s - p3));

我现在遇到的问题是,虽然a == b如果用十进制的计算器计算,但这里不是。它将跳过第一个 if 语句并打印出 a 大于或小于 b。

我已经阅读了很多关于 SO 的类似问题,但其中 none 对我有用。 我试过:

if(fabs(a-b) <= DBL_EPSILON)

有人可以告诉我我错过了什么吗? 谢谢:)

浮点运算本质上是不精确的。

如果您必须使用浮点数,则需要根据您的目的决定“足够接近”的接近程度。例如,您可以检查这两个值是否在彼此的 0.001 范围内(如果这是您关心的精度级别)。