2016-09-28 38 views
4

问: DBL_MIN是最小正双倍吗?DBL_MIN是最小的正数倍吗?

下面的代码似乎用no来解释这个问题。但是,如果这是真的,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

+0

C++的std :: numeric_limits ::分钟文档:http://en.cppreference.com/w/cpp/types/numeric_limits/min –

回答

7

我限制这个答案,也许是不必要的,以IEEE754浮点。

DBL_MIN是不允许的低于正常号码。

std::nextafter被允许返回一个低于正常号码。

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

欲了解更多详情,请参阅https://en.wikipedia.org/wiki/Denormal_number

+1

所以,DBL_MIN是最小的正常双值? – user1235183

+0

是的,就是那个。 – Bathsheba

+0

值得一提的是,在英特尔,浮点寄存器是80位长的双精度值,可以保存更多的值。 –