• 締切済み

イプシロン値を使った比較関数

先日、↓でイプシロン値の記述方法を質問し、お陰様で一つ賢くなりました・・・ https://okwave.jp/qa/q9625188.html 今回、このイプシロン値を使用して2つの浮動小数点数の比較関数を作ってみました。 ところが、意図した結果になりません(数値により正しく判断できない場合がある) //倍精度浮動小数点数比較関数 //相対誤差内であれば、両者は等しいとする //戻り値 a=bのとき:0 a≠bのとき:0以外 #include <math.h> int CompareDoubleValue(const double a, const double b) { //引数の差の絶対値とイプシロン値を使用した相対誤差を比較する //1と引数の大きい方の数値を比較して、より大きい数値をイプシロン値 //と乗算して相対誤差とする if (fabs(a-b) <= (DBL_EPSILON*fmax(double(1), fmax(a, b)))) return(0); else return(-1) ; } ※fabs():倍精度浮動小数点数の絶対値を求める標準関数 ※fmax():2つの引数(倍精度浮動小数点数)の大きいほうの値を返す標準関数 何が悪いのかわからず困っております。 お教え頂けると幸いです。 よろしくお願いします。

みんなの回答

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.1

fmax(a,b)のところは、fmax(fabs(a),fabs(b)) では?

black2005
質問者

お礼

ご回答ありがとうございます。 なるほど~、確かに絶対値の大小関係を比較しないとダメですね。 修正してテストしてみます。 アドバイスに感謝致します。

関連するQ&A