Почему старший бит нормализованного числа всегда равен 1?

Из важной записи в Википедии:

При работе в двоичном формате мантисса характеризуется своей шириной в двоичных разрядах (битах). Поскольку наиболее значимый бит всегда равен 1 для нормализованного числа, этот бит обычно не сохраняется и называется «скрытым битом». В зависимости от контекста скрытый бит может или не может быть засчитан в ширину мантиссы. Например, тот же самый формат двойной точности IEEE 754 обычно описывается как имеющий либо 53-битное значение, включая скрытый бит, либо 52-битное значение, не включая скрытый бит. Понятие скрытого бита применимо только к двоичным представлениям. IEEE 754 определяет точность p как количество цифр в мантиссе, включая любой неявный начальный бит (например, точность p формата двойной точности равна 53).

Почему для нормализованного числа самый старший бит всегда равен 1? Кто-нибудь может объяснить на примере?


person Geek    schedule 20.08.2012    source источник


Ответы (3)


Это не совсем так, для специальных значений, таких как 0, NaN, Infinity и денормальных значений, нет ведущей единицы.

Но да, когда это «нормальное» число, вы всегда можете переписать его так, чтобы мантисса начиналась с 1. Просто увеличивая показатель степени. Эквивалент существует также в десятичном формате, вы всегда можете записать число, чтобы оно начиналось с одной ненулевой цифры, если значение не равно нулю:

  0.5 = 5.0 E-01
  0.05 = 5.0 E-02
  50 = 5.0 E+01
  500 = 5.0 E+02
  etcetera.

С той разницей, что эта единственная цифра будет равна 1 в двоичном формате. Так что его не нужно хранить, это можно сделать вывод. Что дает дополнительную точность. Достаточно привлекательный, чтобы усложнить логику процессора с плавающей запятой, чтобы восстановить эту единицу в вычислениях.

person Hans Passant    schedule 20.08.2012

Единственными цифрами в двоичном формате являются 0 и 1, а ведущие нули не имеют значения (например, 1101 совпадает с 00001101, дополнительные нули ничего не добавляют). Следовательно, самая значимая цифра должна быть 1, так как это единственная возможность.

Поскольку вы знаете, что старший бит должен быть равен 1, вы можете опустить его без потери информации. Это полезно, поскольку позволяет получить дополнительную точность.

Исключением является число 0, но оно обрабатывается с плавающей запятой (наряду с другими особыми случаями, такими как NaN и +/- бесконечность) путем установки смещенной экспоненты на 0.

person verdesmarald    schedule 20.08.2012
comment
Спасибо! Отличное объяснение. - person Zigii Wong; 23.04.2017

Начальные нули не несут никакой полезной информации в каком-либо представлении числа, поэтому их не нужно сохранять. Следовательно, в двоичном представлении самая левая значащая цифра всегда будет 1, и ее тоже не нужно сохранять, можно предположить, что она присутствует.

person High Performance Mark    schedule 20.08.2012