我对 C 代码中的 fabs 函数有一个奇怪的问题。我有两个双精度值,我想使用如下代码找到它们差异的绝对值:
a = 87.967498;
b = 218.025015;
if (fabs(a-b)<2.0)
...code to execute
的值fabs(a-b)
是一个int,等于1。我不知道这里有什么问题,我在网上找不到任何东西。任何帮助都会很棒!
你没有包括<math.h>
. 将以下行添加到您的其他包括:
#include <math.h>
为了更容易找到此类错误,我建议您使用详细的编译器警告(gcc -Wall -Wextra ...
如果您使用 gcc)。
fabs
可以返回 an的唯一方法int
是:
fabs
不是math.h
.math.h
,因此根本没有声明fabs
。在这种情况下,参数和返回值默认为int
. 这当然是一个错误,因为实际实现fabs
不匹配,因此返回的值是无意义的。请参阅此代码:
#include <math.h>
#include <stdio.h>
int main()
{
float a = 87.967498;
float b = 218.025015;
float diff = a-b;
printf("diff=%f\nfabs(diff)=%f\n",diff,fabs(diff));
if (fabs(diff)<2.0) {
printf("OK\n");
} else {
printf("FAIL\n");
}
return 0;
}
它产生这个输出:
diego@malti:~/tmp$ clang test-math.c -o test-math -lm
diego@malti:~/tmp$ ./test-math
diff=-130.057510
fabs(diff)=130.057510
FAIL
看?应用程序没问题,差异(218-87=130)不小于 2。
另请参阅当我编译时,我还链接-lm
以获取数学库。相同的语法适用于 gcc,我只是喜欢使用 clang :)