Почему мы смещаем показатель числа с плавающей запятой?

Я пытаюсь склонить голову к этому представлению с двоичными числами с плавающей точкой, но я не мог найти, независимо от того, где я выгляжу, хороший ответ на вопрос.

Почему экспоненту предвзято?

Что не так с добрым старым надежным двухкомпонентным методом?

Я попытался взглянуть на статью Википедии, посвященную теме, но все, что она говорит, это: «обычное представление для подписанных значений, сделает сравнение более сложным».

Кодировки IEEE 754 имеют удобное свойство, что сравнение сравнения может быть выполнено между двумя положительными номерами, отличными от NaN, просто сравнивая соответствующие битовые строки лексикографически или эквивалентно, интерпретируя эти битовые строки как целые числа без знака и сравнивая эти целые числа. Это работает во всем диапазоне с плавающей запятой от +0,0 до + бесконечности (и тогда просто расширить распространение, чтобы принять во внимание). Так, например, в бинарном 64 формате IEEE 754, 1.1 кодируется как битовая строка (сначала msb)

 0011111111110001100110011001100110011001100110011001100110011010 

в то время как 0.01 кодируется как битовая строка

 0011111110000100011110101110000101000111101011100001010001111011 

который происходит лексикографически перед битовой строкой для 1.1 .

Чтобы это работать, числа с меньшими показателями должны сравниваться перед числами с большими показателями. Пристрастный экспонент делает эту работу, в то время как показатель, представленный в дополнении двух, сделает сравнение более значимым. Я считаю, что это то, к чему относится комментарий Википедии.

Другое наблюдение заключается в том, что при выбранной кодировке число с плавающей запятой +0.0 кодируется как битовая строка, состоящая целиком из нhive.

Я не помню специфику, но было некоторое желание, чтобы наивысший показатель был немного дальше от нуля, чем наименьший нормальный показатель. Это увеличивает число значений x, для которых как x, так и их обратные приблизительно являются представимыми. Например, с 64-битной двоичной плавающей точкой IEEE-754 нормальный диапазон экспоненциального диапазона составляет от -1022 до 1023. Это делает наибольшее конечное представимое значение чуть менее 2 1024 , поэтому интервал, для которого х и его взаимные оба являются приблизительно отображаемыми составляет почти от 2 -1024 до почти 2 1024 . (Числа на самом нижнем конце этого интервала являются субнормальными, поэтому некоторая точность теряется, но они все еще представлены.)

С представлением с двумя дополнениями значения экспоненты будут варьироваться от -1024 до 1023, и мы должны зарезервировать два из них для обработки нhive, субнормальных значений, бесконечностей и NaN. Это оставляет диапазон от -1023 до 1022. При этом интервал для x такой, что оба x и его обратные приблизительно представляются, составляют почти от 2 -1023 до 2 1023 . Таким образом, смещенная компоновка обеспечивает больший полезный диапазон значений.

  • Double vs float на iPhone
  • Представление целых чисел в двухместных
  • Каково первое целое число, которое плавающий IEEE 754 не может точно представлять?
  • Как компьютер выполняет арифметику с плавающей запятой?
  • Форматирование удваивается для вывода в C #
  • Float и двойной тип данных в Java
  • Interesting Posts

    Как восстановить позицию пространства представления, заданную для значения глубины пространства просмотра и ndc xy

    Как правильно сравнить строки?

    Функциональное программирование против объектно-ориентированного программирования

    Как отключить кеширование на стороне клиента и прокси в ASP.NET MVC?

    Firefox не может отображать иконки из набора шрифтов Awesome Webfont

    Как я могу изменить сетевой пароль, который сохранил проводник Windows?

    Какая хорошая Java, curses-like, библиотека для терминальных приложений?

    Как я могу создать сценарий создания резервных копий недавно измененных файлов в Bash?

    У Try / catch нет эффекта

    Хороший бесплатный интернет-фильтр

    Как узнать, является ли текущий пользователь Admin из командной строки Windows?

    Как использовать методы setArguments () и getArguments () во Фрагментах?

    получение размера массива из указателя c ++

    Повторить задачу несколько раз на основе пользовательского ввода в случае исключения в задаче

    int (11) против int (что-то еще)

    Давайте будем гением компьютера.