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

How to set mathematical precision in equations?

提问人: 提问时间:10/20/2021 更新时间:10/20/2021 访问量:68

问:

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

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 上读过很多类似的问题,但没有一个对我有用。 我试过:

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

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

c 厄普西隆

评论

0赞 jarmod 10/20/2021
DBL_EPSILON有什么价值?为什么 epsilon 方法不适合您?
1赞 n. m. could be an AI 10/20/2021
DBL_EPSILON可能不是你想要的(对你的任务来说很小)。请尝试使用其他值。哪一个?不知道,尝试打印一些输入,看看你能合理地期望什么。a-b

答:

2赞 dbush 10/20/2021 #1

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

如果必须使用浮点,则需要确定多近才是“足够接近”的。例如,如果这是您关心的精度级别,您可以检查这两个值之间的距离是否在 0.001 以内。