#numbers #ieee-754
#числа #ieee-754
Вопрос:
Мои предположения для IEEE 754-2008:
двоичный файл16 — 2 ^ 16 различных значений, двоичный файл32 — 2 ^ 32 различных значения, … двоичный файл128 — 2 ^ 128 различных значений.
Это правильно?
Ответ №1:
Это вопрос с подвохом.
Форматы с плавающей запятой определяют некоторые специальные значения. Считаете ли вы их различными, зависит от вашей точки зрения. Следующее для двойной точности (binary64):
- Существует два представления 0: со знаковым битом 0 или 1, а экспонента и мантисса равны нулю. Значения различимы тем фактом, что 1 / 0 = бесконечность и 1 /-0 = -бесконечность. Но они сравниваются одинаково.
- Существует 2 бесконечности, где первые 12 бит равны 0x7ff или 0xfff, а мантисса равна нулю. Это не конечные действительные числа, но они являются значениями.
- Существует целый ряд значений, не являющихся числами (NaN), имеющих биты знака экспоненты 0x7ff (сигнальный NaN) или 0xfff («тихий» NaN) и ненулевую мантиссу. Опять же, это не действительные числа, но они являются различимыми значениями.
Итак, подведем итог:
- Общее количество различимых значений (действительных чисел или других) равно 2 ^ 64.
- Количество различных действительных чисел, исключая бесконечности и считая ноль только один раз, равно
2*(2^11-1)*2^52-1 = 18,437,736,874,454,810,623
.
Для binary16 количество различных действительных чисел равно 2*(2^5-1)*2^10-1 = 63,487
. Для binary32 это 2*(2^8-1)*2^23-1=4,278,190,079
. Для binary128 это 2*(2^15-1)*2^112-1
или около 3.4*10^38
того .
Комментарии:
1. Да, я забыл о диапазоне NaN. Итак, есть 2*(2^8-1)*2^23-1 = 4278190079 для binary32, верно?
2. Использование binary16 для ясности: это
2*(2^5-1)*(2^10-1)
или(2*(2^5-1)*2^10)-1
? Последнее имеет для меня больше смысла, но если это первое, не могли бы вы уточнить?