イプシロン値を使った比較関数
先日、↓でイプシロン値の記述方法を質問し、お陰様で一つ賢くなりました・・・
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つの引数(倍精度浮動小数点数)の大きいほうの値を返す標準関数
何が悪いのかわからず困っております。
お教え頂けると幸いです。
よろしくお願いします。
お礼
Wendy02さんありがとうございます、わざわざこちらにまでご回答いただきまして。 「おまじない」のようなと思っていいのですね。 私も精進いたします…