2016-09-28 1 views
4

Вопрос: Является ли DBL_MIN наименьшим положительным двойным?Является ли 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

+0

C++ STD :: numeric_limits :: мин документация: http://en.cppreference.com/w/cpp/types/numeric_limits/min –

ответ

7

Я ограничение этого ответа, возможно, излишне, чтобы IEEE754 плавающей точкой.

DBL_MIN не разрешено быть непрямым номер.

Но std::nextafter разрешено возвращать subnormal номер.

Следовательно, возвращаемое значение последнего может быть меньше DBL_MIN.

Для получения дополнительной информации см https://en.wikipedia.org/wiki/Denormal_number

+1

Так, DBL_MIN это наименьший нормальный двойной стоимость? – user1235183

+0

Да, это тот. – Bathsheba

+0

Также стоит отметить, что в Intel регистры с плавающей запятой являются 80-битными длинными двойными и могут содержать еще больше значений. –

Смежные вопросы