C コードの fabs 関数に奇妙な問題があります。2 つの double 値があり、次のようなコードを使用してそれらの差の絶対値を見つけたいと考えています。
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
を返すことができる唯一の方法は次の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 を使用するのが大好きです :)