Сколько различных значений может быть сохранено в форматах с плавающей запятой? - PullRequest
4 голосов
/ 12 октября 2011

Мои предположения для IEEE 754-2008:

binary16 - 2 ^ 16 различных значений, двоичные32 - 2 ^ 32 различных значения, ... двоичные 128 - 2 ^ 128 различных значений.

Это правильно?

1 Ответ

7 голосов
/ 12 октября 2011

Это вопрос с подвохом.

Форматы с плавающей точкой определяют некоторые специальные значения. Считаете ли вы их различными, зависит от вашей точки зрения. Следующее предназначено для двойной точности (binary64):

  1. Существует два представления 0: со знаковым битом 0 или 1, а показатель степени и мантисса равны нулю. Значения различаются тем, что 1 / + 0 = бесконечность и 1 / -0 = -инфинитность. Но они сравниваются равными.
  2. Есть 2 бесконечности, где первые 12 бит равны 0x7ff или 0xfff, а мантисса равна нулю. Это не конечные действительные числа, а значения.
  3. Существует целый ряд значений Not-A-Number (NaN), имеющих биты знака + экспоненты 0x7ff (сигнальный NaN) или 0xfff ("тихий" NaN) и ненулевую мантиссу. Опять же, это не действительные числа, а различимые значения.

Итак, подведем итог:

  1. Общее количество различимых значений (действительных чисел или иным образом) составляет 2 ^ 64.
  2. Число различных действительных чисел, исключая бесконечности и считая ноль только один раз, составляет 2*(2^11-1)*2^52-1 = 18,437,736,874,454,810,623.

Для двоичного16 число различных действительных чисел составляет 2*(2^5-1)*2^10-1 = 63,487. Для двоичного 32 это 2*(2^8-1)*2^23-1=4,278,190,079. Для двоичного кода 128 это 2*(2^15-1)*2^112-1 или около 3.4*10^38.

...