2016-09-28 174 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位長的雙精度值,可以保存更多的值。 –