在代码中使用-DBL_MAX安全吗
Is it safe to use -DBL_MAX in code?
我想要极值。
#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;
相关文章:
- 从不同线程使用int64的不同字节安全吗
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 虚拟决赛作为安全
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 如何将元素添加到数组的线程安全函数?
- C++中的线程安全删除
- 通过网络、跨平台传递std::变体是否安全
- <streamsize>C++ 中 numeric_limits::max() 的值
- 黑客级别的Mini-Max Sum
- 'max'匹配'std::function<const int &(const int &, const int &)>'无过载
- 在std::thread中,joinable()然后join()线程安全吗
- 使用std::istream::peek()总是安全的吗
- 从值小于256的uint16到uint8的Endian安全转换
- 在c++队列中使用pop和visit实现线程安全
- 在类型和包装器之间reinterpret_cast是否安全<Type>?
- 以线程安全的方式调用"QQuickPaintedItem::updateImage(const QImage&image)"(no QThread)
- 全局变量 多读取器 一个写入器多线程安全?
- 如何以类型的安全方式分配UINT32_T :: MAX和UINT64_T的最小值
- 在 c++ 中,使用 std::numeric_limits<double>::max() 作为特殊"flag"是否安全?
- 正在使用std::max来比较两个替身是否安全