我对C代码中的fabs函数有一个奇怪的问题。我有两个双值,我想使用这样的代码找到它们差异的绝对值:
a = 87.967498;
b = 218.025015;
if (fabs(a-b)<2.0)
...code to execute
fabs(a-b)
的值是一个int并且等于1.我不知道这里的问题是什么,我在网上找不到任何东西。任何帮助都会很棒!!
答案 0 :(得分:3)
您未加入<math.h>
。将以下行添加到您的其他包括:
#include <math.h>
为了更容易找到这样的错误,我建议你使用详细的编译器警告(gcc -Wall -Wextra ...
如果你使用gcc)。
答案 1 :(得分:2)
fabs
返回int
的唯一方法是:
fabs
中声明的版本之外的math.h
声明。math.h
,因此根本不会声明fabs
。在这种情况下,参数和返回值默认为int
。这当然是一个错误,因为fabs
的实际实现不匹配,因此返回的值是无意义的。答案 2 :(得分:0)
请参阅此代码:
#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:)