Почему регистры Intel x87 имеют ширину 80 бит?

Почему используется такой «странный» размер регистра? Есть ли какая-либо документация о том, почему для этих регистров нежелательно использовать 64 или 128 бит?


person JohnTortugo    schedule 27.09.2012    source источник
comment
Какую практическую проблему программирования вы пытаетесь решить?   -  person Raymond Chen    schedule 27.09.2012
comment
одинарная точность 32 бита, двойная 64 бита и расширенная 80 бит. не имеет ничего общего с процессором Intel.   -  person old_timer    schedule 27.09.2012
comment
en.wikipedia.org/wiki/   -  person Hans Passant    schedule 27.09.2012
comment
Я уверен, что у У. Кэхана есть для этого какое-то обоснование.   -  person ninjalj    schedule 27.09.2012
comment
80-битный формат был и остается идеальным размером для своей цели. Он достаточно велик, чтобы обеспечить преобразование без потерь из 64-битных целочисленных типов со знаком или без знака, его мантисса достаточно мала, чтобы поместиться в четыре 16-битных слова или два 32-битных слова, показатель степени достаточно мал, чтобы уместиться в 16-битном формате. битовое слово, и это позволяет легко извлекать мантиссу и экспоненту без сдвигов и с использованием одной операции маскирования битов для экспоненты. Важно иметь возможность загружать и хранить временные переменные типа повышенной точности, но обычно это не требуется хранить в структурах данных.   -  person supercat    schedule 20.10.2014
comment
Даже если бы процессор мог выполнять загрузку/сохранение с полной точностью только из 16-байтового типа данных [игнорируя 48-битное заполнение], этот тип все равно был бы очень полезен, если бы языки не позволяли программистам фактически использовать это.   -  person supercat    schedule 20.10.2014


Ответы (1)


На странице Википедии стандарта IEEE 754-1985 есть довольно хорошее объяснение относительно 80-битный расширенный формат:

«Стандарт также рекомендует использовать расширенный формат (ы) для выполнения внутренних вычислений с более высокой точностью, чем требуется для конечного результата, чтобы минимизировать ошибки округления».

Число двойной точности с плавающей запятой представлено в 64 битах. Вам понадобится еще несколько бит, чтобы получить более высокую точность для промежуточных результатов, но было бы излишним использовать 128-битный тип, когда вам нужны только 64 бита в конечном результате.

80 бит — это разумно четное число битов, превышающее 64 бита.

Учтите, что шина данных в то время, когда были установлены эти стандарты, была 8- или 16-битной, а не 32- или 64-битной, как сегодня. Если бы стандарт был написан сегодня, 96 бит были бы более разумным числом, или, возможно, данные передавались бы как 128 бит, даже если бы все эти биты не использовались в вычислениях.

person Guffa    schedule 27.09.2012
comment
Еще одним преимуществом 80-битного формата является то, что многие машины без FPU могут обрабатывать 64-битную мантисса и 16-битное экспонентное/знаковое слово более эффективно, чем 53-битную мантисса и 12-битное поле экспоненты/знака. . Жаль, что многие поставщики компиляторов пренебрегли надлежащей поддержкой 80-битного типа, поскольку это позволило бы выполнять многие операции с использованием гораздо меньшего количества шагов, чем необходимо при его отсутствии. - person supercat; 20.10.2014
comment
80 бит с 64-битной мантиссой были специально выбраны таким образом, чтобы логарифмы можно было брать без потери точности (поскольку логарифм отображает экспоненту + мантисса только в мантиссу). - person fuz; 15.03.2020