C fabs返回整数

时间:2013-01-14 09:53:08

标签: c math.h

我对C代码中的fabs函数有一个奇怪的问题。我有两个双值,我想使用这样的代码找到它们差异的绝对值:

a = 87.967498;
b = 218.025015;
if (fabs(a-b)<2.0)
...code to execute

fabs(a-b)的值是一个int并且等于1.我不知道这里的问题是什么,我在网上找不到任何东西。任何帮助都会很棒!!

3 个答案:

答案 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:)