Как вы переводите дробную часть короткого действительного числа, возвращенного сопроцессором 8087?

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

FLDPI                     ;load pi
FSTP DWORD PTR shortReal  ;store pi in memory, then pop stack

Значение, хранимое в shortReal, равно 40 49 0F DB hex. Это переводит к 0100000001001001111111011011 в двоичном виде.

Первый бит равен 0, так что это положительное число. Смещенная экспонентная часть переводится в 1.

Итак, фактическое число выглядит так:

1 (подразумеваемая точка)10010010000111111011011

1 (подразумеваемая точка)1 переводится в 3., так что это правильная целая часть числа PI, но мое понимание нарушается после этой точки.

Теперь осталось следующее число:

0010010000111111011011

001 можно перевести на 1, что было бы правильно. Однако это означает, что следующее число будет 001, что снова будет 1, что неправильно, или это может быть 0010, что равно 2, но это тоже неправильно.

Как вы выделяете каждую цифру в дробной части.

1 ответ

Решение

Нет, это не то, как вы рассчитываете... Как вы двигаетесь вправо от десятичной запятой. Точность увеличивается.

Рассчитайте, используя эту формулу. Рассмотрим значение n, уменьшающееся как -1 -2 -3 ...

Теперь десятичное значение = 0*2^-1 + 0*2^-2 + 1*2^-3 + 0*2^-4 + 0*2^-5 + 1*2^-6 и т. Д. До конца

Другие вопросы по тегам