我想要极端的价值.
#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;
}
Run Code Online (Sandbox Code Playgroud)
那么,-DBL_MAX在代码中使用是否安全?如果有人知道更好的方法,请在这里分享.
DBL_MAX是标准库的一部分.因此,它并不特别不安全.
然而,在不可靠的意义上,比较非整数浮点值是否相等本质上是不安全的.
这是因为浮点运算可以以比你选择的类型更高的精度执行,结果来回转换,并不总是像你想象的那样.
在传递中,定义一个像:
#define FEQ(x, y) (fabs((x) - (y)) < THRESHOLD)
Run Code Online (Sandbox Code Playgroud)
...是不安全的:你很容易成为不受欢迎的文本替换的受害者,而且这是一个眼睛.
而是使用inline函数,即使inline不保证优化:
inline bool feq( double const x, double const y ) { return fabs( x - y ) < THRESHOLD; }
Run Code Online (Sandbox Code Playgroud)
然后同样适用于常量THRESHOLD,它应该只是C++中的常量:
double const threshold = 2*DBL_MIN;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9242 次 |
| 最近记录: |