在代码中使用-DBL_MAX是否安全?

时间:2013-02-25 10:06:58

标签: c++

我想要极端的价值。

#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是否安全?如果有人知道更好的方法,请在这里分享。

1 个答案:

答案 0 :(得分:8)

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;