如何设置方程式的数学精度?
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 范围内(如果这是您关心的精度级别)。
如何为以下代码设置数学精度?
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 范围内(如果这是您关心的精度级别)。