Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

лекции / Лекция 9 по ИТ_Представления в ЭВМ машинных кодов чисел с плавающей запятой

.pdf
Скачиваний:
71
Добавлен:
17.11.2022
Размер:
560.49 Кб
Скачать

Курс лекций по дисциплине «Информационные технологии» для студентов очной формы обучения

 

 

Блок 2: «Аппаратная реализация арифметических операций над числами,

 

Лекция № 9

представленными в машинных кодах»

 

 

 

Тема 2.3: «Машинные коды. Представление в ЭВМ машинных кодов

 

 

 

 

чисел в форме с плавающей запятой»

 

 

Курс – 34 акад. часа

Выпуск 1

Изменение 0

 

Экземпляр № 1

Лист 1/6

 

 

 

 

 

 

 

9. Представление в ЭВМ машинных кодов чисел, представленных в форме с

плавающей запятой

Как уже говорилось ранее, в ЭВМ числа записываются,

обрабатываются и хранятся в виде машинных кодов, и при этом числа могут быть представлены как в форме с фиксированной запятой (естественная форма) – правильные дроби и целые числа, так и в форме с плавающей запятой (нормальная форма) – мантисса с порядком для решения проблемы переполнения разрядной сетки.

И поскольку при представлении машинных кодов чисел в форме с фиксированной запятой может происходить переполнение разрядной сетки,

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

Ниже приведено условно-графическое изображение 13-ти разрядного регистра для представления модифицированного прямого машинного кода числа в форме с плавающей запятой, разрядная сетка которого состоит из двух знакового разрядов мантиссы числа, двух знаковых разрядов порядка числа, четырёх разрядов порядка числа и пяти разрядов мантиссы числа:

Знак мантиссы Знак порядка

Порядок числа (PA)

 

Мантисса числа (mA)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

A= ±mA*q±PA, где:

mA – мантисса числа А,

PA – порядок числа А,

q – основание системы счисления.

Курс лекций по дисциплине «Информационные технологии» для студентов очной формы обучения

 

 

Блок 2: «Аппаратная реализация арифметических операций над числами,

 

Лекция № 9

представленными в машинных кодах»

 

 

 

Тема 2.3: «Машинные коды. Представление в ЭВМ машинных кодов

 

 

 

 

чисел в форме с плавающей запятой»

 

 

Курс – 34 акад. часа

Выпуск 1

Изменение 0

 

Экземпляр № 1

Лист 2/6

 

 

 

 

 

 

 

При переводе мантиссы числа в машинный код, следует учитывать некоторые особенности. Мантисса представляется правильной дробью и должна удовлетворять условиям:

1 ≤ |m| < 1, и если q =2, то 0.5 ≤ |m| < 1 , в двоичной СС: 0.12 ≤ | | <

(т.е. первая после точки цифра – значащая «1»).

Такое представление мантиссы называется нормализованной формой,

при этом принято, что двоичный прямой код мантиссы начинается со значащей цифры, т.е. единицы.

При заполнении разрядной сетки регистра модифицированным машинным кодом числа, представленного в форме с плавающей запятой,

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

Поскольку в ячейки для записи порядка числа вносится только степень порядка, являющаяся целым числом (основание порядка по умолчанию равно двум и не записывается в код), то нулями заполняются старшие разряды сетки, отведенные под порядок числа.

А при записи мантиссы, которая по условию является дробным числом,

нулями заполняются младшие разряды сетки, отведенные под мантиссу.

Причём мантисса должна записываться в регистр в нормализованной форме,

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

Курс лекций по дисциплине «Информационные технологии» для студентов очной формы обучения

 

 

Блок 2: «Аппаратная реализация арифметических операций над числами,

 

Лекция № 9

представленными в машинных кодах»

 

 

 

Тема 2.3: «Машинные коды. Представление в ЭВМ машинных кодов

 

 

 

 

чисел в форме с плавающей запятой»

 

 

Курс – 34 акад. часа

Выпуск 1

Изменение 0

 

Экземпляр № 1

Лист 3/6

 

 

 

 

 

 

 

количество разрядов нужно уменьшить порядок числа, чтобы скомпенсировать увеличение мантиссы.

 

 

Например:

A= 0,001012*102

1012

здесь видно,

 

что мантисса не

 

 

 

 

 

 

удовлетворяет условиям нормализации и её нужно увеличить на 2 порядка

 

сдвигом влево, следовательно, порядок числа нужно уменьшить на 2, чтобы

 

 

 

 

 

 

 

 

 

112

 

 

 

 

 

 

 

 

 

 

скомпенсировать число: A= 0,1012*102

 

 

 

 

 

 

 

 

 

 

 

Теперь можно записать прямой модифицированный машинный код

 

числа в нашу разрядную сетку:

 

 

 

 

 

 

 

 

 

 

 

 

Код знака мантиссы

Код знака степени порядка

Код степени порядка числа (PA)

 

Код мантиссы числа (mA)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

0

 

0

0

 

0

0

 

1

1

 

1

 

0

 

1

0

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Такой порядок разметки разрядной сетки не является обязательным, он может быть иным и определяется это программной интерпретацией.

Если бы разрядная сетка была размечена по-другому, то и запись кода в неё была бы другая, вариантов множество:

Код знака степени порядка

Код знака мантиссы

 

Код степени порядка числа (PA)

 

Код мантиссы числа (mA)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

0

 

 

0

0

 

0

 

0

 

1

1

 

1

0

1

0

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Код знака степени порядка

 

Код степени порядка числа (PA)

 

Код знака мантиссы

 

Код мантиссы числа (mA)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

0

 

 

0

0

1

 

1

 

 

 

0

0

 

1

0

1

0

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Код знака мантиссы

Код мантиссы числа (mA)

 

 

 

Код знака степени порядка

Код степени порядка числа (PA)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

0

 

 

1

0

1

 

0

 

0

 

 

0

0

 

0

0

1

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Курс лекций по дисциплине «Информационные технологии» для студентов очной формы обучения

 

 

Блок 2: «Аппаратная реализация арифметических операций над числами,

 

Лекция № 9

представленными в машинных кодах»

 

 

 

Тема 2.3: «Машинные коды. Представление в ЭВМ машинных кодов

 

 

 

 

чисел в форме с плавающей запятой»

 

 

Курс – 34 акад. часа

Выпуск 1

Изменение 0

 

Экземпляр № 1

Лист 4/6

 

 

 

 

 

 

 

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

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

Например, результат промежуточных вычислений получился таким:

Код знака мантиссы

 

Код мантиссы числа (mA)

 

Код знака степени порядка

Код степени порядка числа (PA)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

1

 

1

0

1

0

0

 

 

0

0

 

 

0

0

1

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

В приведённом примере наблюдается явление разнозначности в знаковой части кода мантиссы, указывающее на денормализацию мантиссы слева. Число характеризуется при этом, как положительное, так как старший знаковый разряд мантиссы его однозначно таковым определяет. В этом случае необходимо избавиться от разнозначности в знаковой части кода мантиссы и достигается это путем сдвига знаковой части кода вправо, при этом старший знаковый разряд смещается в младший, сам оставаясь при этом таким, как и был до сдвига. Младший знаковый разряд перемещается в старший значащий, сдвигая при этом весь код мантиссы вправо на один разряд и «выталкивая» в никуда младший значащий разряд мантиссы. Такой сдвиг кода мантиссы вправо может происходить как с потерей точности, что происходит в том случае, если в никуда «выталкивается» единица, так и без потери точности, если в никуда «выталкивается» ноль. Так происходит потому, что мантисса – число дробное, меньшее единицы, и количество нулей на его конце никаким образом не влияет на его величину. При таком

Курс лекций по дисциплине «Информационные технологии» для студентов очной формы обучения

 

 

Блок 2: «Аппаратная реализация арифметических операций над числами,

 

Лекция № 9

представленными в машинных кодах»

 

 

 

Тема 2.3: «Машинные коды. Представление в ЭВМ машинных кодов

 

 

 

 

чисел в форме с плавающей запятой»

 

 

Курс – 34 акад. часа

Выпуск 1

Изменение 0

 

Экземпляр № 1

Лист 5/6

 

 

 

 

 

 

 

сдвиге вправо на один разряд мантисса уменьшается на 1 порядок,

следовательно, чтобы всё число осталось прежним, необходимо скомпенсировать уменьшение мантиссы увеличением степени порядка на единицу.

Код знака мантиссы

 

Код мантиссы числа (mA)

 

Код знака степени порядка

Код степени порядка числа (PA)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

0

 

1

1

0

1

0

 

 

0

0

 

 

0

1

0

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

Если же разнозначные значения получились в отрицательном числе, то

данный пример будет выглядеть следующим образом:

Код знака мантиссы

 

Код мантиссы числа (mA)

 

Код знака степени порядка

Код степени порядка числа (PA)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

0

 

1

0

1

0

0

 

 

0

0

 

 

0

0

1

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Код знака мантиссы

 

Код мантиссы числа (mA)

 

Код знака степени порядка

Код степени порядка числа (PA)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

1

 

0

1

0

1

0

 

 

0

0

 

 

0

1

0

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

Влево сдвиг, как правило, производят, если результат арифметической операции привел к денормализации мантиссы (к её уменьшению), так называемая денормализация мантиссы справа или истинная денормализация, и нужно добиться значащего разряда после точки (в прямом коде денормализованное число имеет ноль после точки, в дополнительном,

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

Например, результат промежуточных вычислений получился таким:

Код знака мантиссы

 

Код мантиссы числа (mA)

 

Код знака степени порядка

Код степени порядка числа (PA)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

0

 

0

0

1

1

0

 

 

0

0

 

 

0

0

 

1

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

В

приведённом

примере

наблюдается

денормализация

мантиссы

справа. Число характеризуется при этом, как положительное. В этом случае

Курс лекций по дисциплине «Информационные технологии» для студентов очной формы обучения

 

 

Блок 2: «Аппаратная реализация арифметических операций над числами,

 

Лекция № 9

представленными в машинных кодах»

 

 

 

Тема 2.3: «Машинные коды. Представление в ЭВМ машинных кодов

 

 

 

 

чисел в форме с плавающей запятой»

 

 

Курс – 34 акад. часа

Выпуск 1

Изменение 0

 

Экземпляр № 1

Лист 6/6

 

 

 

 

 

 

 

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

следовательно, чтобы всё число осталось прежним, необходимо скомпенсировать увеличение мантиссы уменьшением степени порядка на такое же количество единиц.

Код знака мантиссы

 

Код мантиссы числа (mA)

 

Код знака степени порядка

Код степени порядка числа (PA)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

0

 

1

 

1

0

0

0

 

 

0

0

 

 

0

0

0

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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