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 を使用するのが大好きです :)