/ / Діапазон репрезентативних значень 32-бітового, 64-бітного і 80-бітного float IEEE-754? - c ++, c ++ 11, з плаваючою комою, x86-64, ieee-754

Діапазон репрезентативних значень 32-бітового, 64-бітного і 80-бітного float IEEE-754? - c ++, c ++ 11, з плаваючою комою, x86-64, ieee-754

У стандарті C ++ говориться про плаваючі літерали:

Якщо масштабоване значення не знаходиться в діапазоні репрезентативних значень для його типу, програма погано сформована.

Масштабоване значення - значна частина, помножена на частину 10 ^.

Під x86-64:

  • float являє собою одноточну точність IEEE-754
  • double являє собою подвійну точність IEEE-754
  • long double є 80-бітною розширеною точністю IEEE-754

У цьому контексті, який діапазон повторюваних значень для кожного з цих трьох типів? Де це задокументовано? або як він обчислюється?

Відповіді:

2 для відповіді № 1

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

EDIT:

WRT ваше питання (оскільки ні я, ні інші відповіді насправді відповів): діапазон репрезентативних значень [-type_MAX...type], де type є однією з FLT, DBL, або LDBL.


3 для відповіді № 2

Якщо ви знаєте кількість біт експонента і біти мантиси, то засновані на Формат IEEE-754, можна встановити, що максимальне абсолютне репрезентативне значення:

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

Мінімальна абсолютна величина (не включаючи нуль або. \ T денормали) є:

2^(2-2^(E-1))
  • Для одноточної точності, E 8, M 23.
  • Для подвійної точності, E 11, M 52.
  • Для розширеної точності, я не впевнений. Якщо ви маєте на увазі 80-бітну точність x87 FPU, то, наскільки я можу сказати, це не сумісний з IEEE-754...

-3 для відповіді № 3

Я шукав найбільший reprezentable число 64 бітами та закінчуючи роблячи мій власний 500 цифру плаваючою точкою калькулятор. Це те, що я придумав, якщо всі 64 біти включені

18,446,744,073,709,551,615

18 тис. 446 кв. 744 трлн. 73 млрд. 709 млн. 551 тис. 615