2

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

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

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

4

3 回答 3

3

你没有包括<math.h>. 将以下行添加到您的其他包括:

#include <math.h>

为了更容易找到此类错误,我建议您使用详细的编译器警告(gcc -Wall -Wextra ...如果您使用 gcc)。

于 2013-01-14T09:54:21.420 回答
2

fabs可以返回 an的唯一方法int是:

  • 您的程序使用的声明fabs不是math.h.
  • 您的程序未能包含math.h,因此根本没有声明fabs。在这种情况下,参数和返回值默认为int. 这当然是一个错误,因为实际实现fabs不匹配,因此返回的值是无意义的。
于 2013-01-14T09:54:25.347 回答
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 :)

于 2013-01-14T10:03:53.463 回答