提问人: 提问时间:10/20/2021 更新时间:10/20/2021 访问量:68
如何在方程式中设置数学精度?
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 上读过很多类似的问题,但没有一个对我有用。 我试过:
if(fabs(a-b) <= DBL_EPSILON)
有人可以告诉我错过了什么吗? 谢谢:)
答:
2赞
dbush
10/20/2021
#1
浮点运算本质上是不精确的。
如果必须使用浮点,则需要确定多近才是“足够接近”的。例如,如果这是您关心的精度级别,您可以检查这两个值之间的距离是否在 0.001 以内。
评论
DBL_EPSILON
可能不是你想要的(对你的任务来说很小)。请尝试使用其他值。哪一个?不知道,尝试打印一些输入,看看你能合理地期望什么。a-b