Диапазон представимых значений 32-разрядных, 64-разрядных и 80-разрядных чисел с плавающей запятой IEEE-754?

В стандарте C ++ говорится о плавающих литералах:

Если масштабированное значение не находится в диапазоне представимых значений для его типа, программа является некорректной.

Масштабированное значение — это значительная часть, умноженная на 10 ^ экспоненциальную часть.

Под x86-64:

  • float это IEEE-754 одинарной точности
  • double является IEEE-754 двойной точности
  • long double это 80-битная расширенная точность IEEE-754

В этом контексте, каков диапазон представляемых значений для каждого из этих трех типов? Где это задокументировано? или как рассчитывается?

1

Решение

Ответ (если вы находитесь на машине с плавающей точкой IEEE)
в float.h, FLT_MAX, DBL_MAX а также LDBL_MAX, В системе
с полной поддержкой IEEE, что-то около 3.4e + 38, 1.8E + 308 и
1.2E4932. (Точные значения могут отличаться и могут быть выражены
по-разному, в зависимости от того, как компилятор делает свой ввод и
округления. g ++, например, определяет их как компилятор
встроенные модули.)

РЕДАКТИРОВАТЬ:

WRT ваш вопрос (так как ни я, ни другие респонденты
на самом деле ответил): диапазон представимых значений
[-type_MAX...type], где
type один из FLT, DBL, или же LDBL,

2

Другие решения

Если вы знаете количество экспонентных битов и битов мантиссы, то на основе Формат IEEE-754, можно установить, что максимальное абсолютное представимое значение равно:

2^(2^(E-1)-1)) * (1 + (2^M-1)/2^M)

Минимальное абсолютное значение (не включая ноль или денормализованные числа) является:

2^(2-2^(E-1))
  • Для одинарной точности, E это 8, M 23
  • Для двойной точности, E это 11, M это 52.
  • Для повышенной точности я не уверен. Если вы имеете в виду 80-битную точность x87 FPU, то, насколько я могу судить, это не соответствует IEEE-754
4

Я искал наибольшее представимое число в 64 бита и закончил тем, что создал свой собственный 500-значный калькулятор с плавающей запятой. Это то, что я придумаю, если все 64 бита включены

18.446.744.073.709.551.615

18 квинтиллионов 446 квадриллионов 744 триллионов 73 миллиарда 709 миллионов 551 тысяча 615

-3
По вопросам рекламы [email protected]