DBL_MIN是最小的正双倍?

时间:2016-09-28 12:00:46

标签: c++ language-lawyer numeric

问: DBL_MIN是最小的正双倍?

下面的代码似乎没有回答这个问题。但如果这是真的,那么如何定义DBL_MIN以及它的用途或用途是什么。

平台:Windows7& Visual Studio 2013

double next_to_zero = std::nextafter(0.0,DBL_MIN);
bool b =  DBL_MIN <= next_to_zero;
std::cout << std::boolalpha 
          << "is dbl_min the smallest representable double? "
          << b << '\n';

std::cout << std::setprecision(56)
          << "dbl_min = " << DBL_MIN << '\n'
          << "next to zero = " << next_to_zero;

输出:

  

是dbl_min最小的可表示的双倍?假

     

dbl_min = 2.2250738585072013830902327173324040642192159804623318306e-308

     

零旁边= 4.9406564584124654417656879286822137236505980261432476443e-324

2 个答案:

答案 0 :(得分:8)

我将这个答案(可能是不必要的)限制在IEEE754浮点上。

DBL_MIN不允许是次正常号码。

但允许std::nextafter返回次正常号码。

因此后者的返回值可能小于DBL_MIN

有关详细信息,请参阅https://en.wikipedia.org/wiki/Denormal_number

答案 1 :(得分:2)

DBL_MIN是最小的正双数吗?

不确定。
DBL_MIN是最小的正 normal double

DBL_TRUE_MIN是最小的正数double(自C ++ 17起)。当DBL_MIN支持次法线时,它会比double小。