2013-08-23 3 views
1

Я продолжаю видеть эту бессмыслицу около 53 бит точности в 64-битном представлении с плавающей точкой IEEE. Кто-нибудь, пожалуйста, объясните мне, как в мире бит, который застрял с 1 в нем, вносит НИЧЕГО в числовую точность? Если бы у вас был блок с плавающей точкой с бит0, застрявшим с 1, вы, конечно же, знали бы, что он производит 1 меньшую точность, чем обычно. Где эти чувства по этому поводу?Это 52 или 53 бит точности с плавающей запятой?

Кроме того, только показатель степени масштабирования без мантиссы полностью определяет, где находится старший бит числа, поэтому ни один ведущий бит никогда не используется. 53-й бит примерно такой же реальный, как и 19-е отверстие. Это просто (полезный) костыль, который помогает человеческому разуму и логике доступа к таким ценностям в двоичном виде. Требование иначе - двойной подсчет.

Либо все книги и статьи, претендующие на эту 53-я глупость, ошибочны, либо я идиот. Но застрявший бит застрял. Давайте услышим аргументы об обратном.

+1

Основываясь на вашей дискуссии с @Eric Postpischil в комментариях к его ответу, это не так много, что вы ошибаетесь, поскольку вы считаете, что «бит точности» означает нечто иное, чем все остальные (включая авторов IEEE-754) считают, что это означает. –

+0

Вполне разумно спросить, как бит, который всегда 1, может повлиять на точность, и ваш комментарий не освещает ничего на этом счету. Мой последний комментарий к Erik показывает, что 53-битная точность действительно доступна, несмотря на постоянный бит. Недостаток моего вопроса не соответствует действительности, пожалуйста, исправьте его. –

+0

Я не голосовал за ваш вопрос; ваш каламбур с кем-то другим. Пользователи с достаточным количеством голосов для голосования могут воспользоваться этой привилегией, и им не требуется объяснять самих себя. Точно так же можно свободно комментировать без голосования. –

ответ

10

Математическое значение 64-разрядного двоичного объекта с плавающей точкой IEEE-754 имеет 53 бит. Это кодируется с сочетанием 52-битового поля в исключительно для мантиссы и некоторую информацию из поля показателя, который указывает, является ли 53-й бит равен 0 или 1.

Так как основное поле мантисса составляет 52 бита, некоторые люди относятся к значению 52 бит, но это небрежная терминология. Значительное поле не содержит всей информации о значении, а полное значение - 53 бит.

Неверно, что ведущий бит значащего никогда не используется (как и все, кроме 1). Когда кодирование показателя равно нулю, ведущий бит мантиссы равен 0 вместо того, чтобы более частое 1.


«мантиссы» является предпочтительным термином, а не «мантиссы.» А это мантисса линейная, мантисса логарифмическая.

+0

Плавающая точка может представлять только 2^52 разных мантиссы. Кодировка 53-го бита отсутствует, это подразумевается для всех значений без недочета, за исключением единственного значения 0.0. Это видно на любой диаграмме представления. 53 бит минус один застрявший бит = 52 бит фактической точности. –

+3

@ChrisCochran: в соответствии с разделом 3.4 IEEE 754-2008, если E (кодировка экспоненты) равна нулю, а T (конечное значение поля значений) не равно нулю, значение числа с плавающей запятой равно (-1) ** s • 2 ** emin • (0 + 2 ** (1-p) • T), где s - знаковый бит, emin - минимальный показатель (-1022 для 64-битного двоичного кода), а p - точность в бит (53 для 64-битного двоичного файла, в таблице 3.5). Таким образом, существуют числа, отличные от нуля, для которых старший бит равен нулю (старший бит равен «0» в приведенном выше выражении). –

+1

@ChrisCochran: Относительно "всех значений без нижнего потока". Значения не имеют недостатков; underflow - это то, что происходит во время операции, когда крошечный ненулевой результат обнаруживается в соответствии с определенными правилами. Вы могли бы означать «субнормальные числа». Однако субнормальные числа являются числами и представлены в плавающей запятой. –

4

Ключевое понятие здесь - «нормализация». В общей научной нотации каждое значение имеет много представлений. Это делает арифметику, особенно сравнение, более сложной, чем необходимо. Общее решение состоит в том, чтобы потребовать, чтобы значительная цифра значащего значения была отличной от нуля. Например, первая система с плавающей запятой, с которой я работал, была базой 16, а начальная цифра значащего значения находилась в диапазоне от 1 до F.

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

Нормальные номера в 64-битном двоичном разряде IEEE 754 имеют 53-значный битанд, чей неявный ведущий бит известен как 1, а остальные 52 бит хранятся в физическом представлении.

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

Это было бы реальное ограничение для показателя нуля, потому что нет меньшего экспоненты для использования. Бинарная плавающая точка IEEE 754 решает, что по-разному сохраняя очень маленькие величины амплитуды с нулевым показателем. Они содержат не более 52 значащих бит, все сохраненные, с разрешенными ведущими нулями.Это позволяет отображать очень маленькие величины величин в виде ненулевых чисел с ценой меньшей точности.

Бесконечность и NaN хранятся по-разному, со всеми показателями.

0

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

Смежные вопросы