2

C コードの fabs 関数に奇妙な問題があります。2 つの double 値があり、次のようなコードを使用してそれらの差の絶対値を見つけたいと考えています。

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を返すことができる唯一の方法は次の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 に答える