Где стандарт C ++ определяет диапазон значений типов с плавающей запятой?

StackOverflow https://stackoverflow.com/questions/1816552

Вопрос

Насколько я знаю, значения с плавающей запятой имеют вид n * 2 ^ e, с

  • диапазон значений с плавающей запятой равен n = -(2^23-1) - (2^23-1), и e = -126 - 127,
  • двойной диапазон равен n = -(2^52-1) - (2^52-1), и e = -1022 - 1023

Я просматривал стандарт C ++, но не смог найти место, где стандарт определяет это или предписывает ассоциацию типов float, double и long double с диапазонами, определенными в других стандартах (IEEE).Единственная связанная вещь, которую я нашел в 3.9.1.8, это:

Существует три типа с плавающей запятой:плавающий, двойной и длинный двойной.Тип double обеспечивает по меньшей мере такую же точность, как float, а тип long double обеспечивает по меньшей мере такую же точность, как double.Набор значений типа float является подмножеством набора значений типа double;набор значений типа double является подмножеством набора значений типа long double.Представление значений типов с плавающей запятой определяется реализацией.

И никакого упоминания о минимальном диапазоне, предусмотренном типом.

Где / как стандарт определяет (минимальный?) диапазон значений типов с плавающей запятой?Или компилятор может свободно выбирать любой диапазон значений и при этом оставаться совместимым со стандартом?

Это было полезно?

Решение

Точно так же, как пределы целых чисел, пределы для float, double и long double импортируются из стандарта C.Минимальное значение для констант FLT_MAX, DBL_MAX и LDBL_MAX является 1E+37.Для их *_MIN варианты максимальное значение равно 1E-37.

Другие советы

То, что вы процитировали, - это все, что гарантировано о типах с плавающей запятой в C ++.Как говорится, их представление определяется реализацией.

Однако вы можете запросить информацию об ограничениях и о том, являются ли типы типами, указанными в стандарте IEC 559 (IEEE 754), используя std::numeric_limits шаблоны в <limits>.

Стандарт не определяет такие вещи, потому что они часто зависят от аппаратного обеспечения и меняются с течением времени.Хотя сегодня 32 бита считаются стандартом, через 10 лет выполнение чего-либо менее чем в 64 битах может показаться неприятным.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top