在代码中使用-DBL_MAX安全吗

Is it safe to use -DBL_MAX in code?

本文关键字:MAX 安全 -DBL 代码      更新时间:2023-10-16

我想要极值。

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

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;