Почему нет лучшего представления для плавающих точек, чем знак и величина? - PullRequest
0 голосов
/ 19 апреля 2010

У нас есть 2 дополнения для целых чисел, которые позволяют нам выполнять операции, не беспокоясь о знаке. Это большая помощь на уровне реализации.

Точно так же у нас так много операций с плавающей запятой, и все же мы полагаемся на знак и величину. В чем причина?

Почему дополнение 2, например, система не работает для поплавков?

Ответы [ 2 ]

4 голосов
/ 19 апреля 2010

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

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

0 голосов
/ 19 апреля 2010

Если вы покопаетесь в стандартном представлении чисел с плавающей запятой, это на самом деле целочисленная мантисса и показатель степени. Я говорю как целочисленный, так как при нормализации первый бит всегда равен 1 - вы знаете, что произведение двух чисел всегда будет начинаться с 0 или 1 (а в первом случае вам нужно сдвинуть результаты влево на один и скорректировать показатель степени соответственно, с потерей единственного бита точности). Умножение и деление ведутся хорошо, если вы не переполняете количество бит, которое вы можете хранить в показателе степени.

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

Не могли бы вы использовать здесь нотацию с двумя дополнениями? Возможно ... но вы не можете использовать те же правила для манипулирования представлением.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...