8

極端な-ve値が必要です。

#include <iostream> 
using namespace std; 
#include <math.h>
#include <limits.h>
#include <values.h>

#define THRESHOLD 2*DBL_MIN

#define FEQ(x, y) (fabs((x) - (y)) < THRESHOLD)

int main( )
{ 
double  a = -DBL_MAX; // I want here minimum value of double
if(FEQ(a,-DBL_MAX))
cout<<"Equal " <<endl;
else
cout<<"NOt equal"<<endl;
return 0;



}

それで、-DBL_MAXコードで使用するのは安全ですか?誰かがより良いアプローチを知っているなら、ここで共有してください。

4

1 に答える 1

9

DBL_MAX標準ライブラリの一部です。そのため、特に危険ではありません。

ただし、整数でない浮動小数点値を等しいかどうか比較することは、信頼できないという意味で、本質的に安全ではありません。

これは、浮動小数点演算が、選択した型よりも高い精度で実行され、結果が前後に変換される可能性があり、常に考えているとは限らないためです。


ついでに、次のようなマクロを定義します。

#define FEQ(x, y) (fabs((x) - (y)) < THRESHOLD)

… 安全ではありません: 望ましくないテキスト置換の被害者になりやすいだけでなく、目障りです。

最適化を保証しないinline場合でも、代わりに関数を使用します。inline

inline bool feq( double const x, double const y ) { return fabs( x - y ) < THRESHOLD; }

同じことがTHRESHOLD定数にも当てはまります。C++ では単純に定数である必要があります。

double const threshold = 2*DBL_MIN;
于 2013-02-25T10:09:26.147 に答える