Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


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



Фиксированная запятая

Оговоримся, что разрядная сетка машины имеет постоянное число разрядов - n.

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

|X| < 1

Введём две характеристики чисел: диапазон изменения и точность представления.

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

Отличное от нуля самое малое число:

Таким образом, диапазон чисел, с которыми работает ЭВМ, есть:

|X|min < = |X| < = |X|max

2-n < = |X| < = 1 - 2-n

Иными словами, числа, которые выходят за диапазон изменения, в ЭВМ не могут быть представлены точно. Если

|X| < |X|min = 2-n,

то такое число воспринимается как нуль.

Если: |X| > |X|max = 1- 2-n,

то такое число воспринимается как бесконечно большое. Этим двум случаям соответствуют понятия машинного нуля и машинной бесконечности.

При оптимальном округлении абсолютная ошибка:

Минимальная относительная ошибка:

так как при большом " n "

Максимальная относительная ошибка:

Ошибка представления числа зависит от величины самого числа и способа округления:

Заметим, что для малых чисел ошибка может достигать большой величины.

 

Плавающая запятая

В ЭВМ с плавающей запятой число представляется в виде:

X = ± Mx * q±p,

где: Mx - мантисса числа;

q - основание системы счисления;

p - порядок.

Разрядная сетка машины принимает следующий вид:

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

Пусть " m " разрядов отведено под изображение мантиссы, а " k " разрядов под изображение порядка. Тогда для двоичной системы и нормализованного вида числа:

q = 2;

0, 1 < = Mx < 1 - нормализованная мантисса.

То есть диапазон чисел:

Абсолютная ошибка представления числа в ЭВМ с плавающей запятой равна:

Так как

2-1 < = |Mx| < = 1-2-m,

то минимальная относительная ошибка:

а максимальная относительная ошибка:

Видно, что относительная ошибка в ЭВМ с плавающей запятой не зависит от порядка числа. При этом точность представления больших и малых чисел изменяется незначительно.

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

 

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

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

  • сложение
  • сдвиг
  • передача
  • преобразование кодов.

Сложение выполняется по правилам сложения чисел в позиционных системах счисления.

То есть эта операция выполняется поразрядно, а возникающий в младших разрядах перенос направляется в старшие разряды.

Пример:

0, 101101 1-ое слагаемое

+0, 000101 2-ое слагаемое

________

0, 101000 сумма

0, 00101 перенос

________

0, 100010 сумма

0, 01 перенос

________

0, 110010 сумма

Операции сложения производятся одновременно над всеми разрядами двух слагаемых и продолжаются до тех пор, пока возникают переносы. Возникающие переносы приводят к продолжению операции. Это одна из особенностей позиционных систем. Видим, что собственно операция определения частичной суммы слагаемых выполняется в один приём, а возникающие переносы распространяются на всё более старшие разряды.

Сдвиг

Различают два вида микрооперации сдвига:

  • логический сдвиг;
  • арифметический сдвиг;

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

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

Передача.

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

Различают два вида передач:

  • запись (с разрушением ранее записанной информации);
  • чтение (без разрушения).

Преобразование.

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

 

Прямой код.

Это естественное и наиболее привычное представление числа в следующем виде:

знак:

" + " соответствует 0

" - " соответствует 1

В цифровых разрядах пишется модуль положительного или отрицательного числа.

[X]пк - обозначим таким образом изображение числа " X " в прямом коде.

Рассмотрим диапазоны представляемых чисел:

X+min = 0, 000....0 - изображение положительного нуля

X+max = 0, 111....1 = 1 - 2-n

X-min = 1, 111....1 = -(1-2-n)

X-max = 1, 000....0 - изображение отрицательного нуля.

Таким образом, нуль имеет двоякое изображение.

Замечания:

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

2. при выполнении операции умножения отдельно и независимо находятся модули произведений кодов, а знак находится как результат операции сложения по модулю два:

3. [X]пк * [Y]пк = sign Z. |Z|

|Z| = |X|*|Y|

Собственно умножение выполняется с применением микроопераций сложения и сдвига.

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

Вследствие ряда неудобств в ЭВМ операции вычитания, сложения чисел с разными знаками и деления в прямом коде практически не выполняются.

Дополнительный код

Дополнительным называется код, в котором для положительного числа в знаковом разряде пишется " 0", в цифровых - модуль числа, а для отрицательного в знаковом разряде пишется " 1", в цифровых - дополнение числа до единицы.

 

Если некоторое X- = -0, x1x2...xn нужно представить в дополнительном коде, то

где: 1 - 0, x1x2...xn = 0, Z1Z2...Zn

Диапазоны представленных чисел:

Х+ min = 0, 0...0 - положительный нуль

Х+ max = 0, 11...1 = 1-2-n - максимальное положительное число.

X- min = 1, 11...1 = 2-2-n - минимальное отрицательное число

X- max = 1, 0...0 - наибольшее(по модулю) отрицательное число

Таким образом, нуль имеет единственное представление.

В самом деле, так как

X-X = [X+]дк + [X-]дк = 0, то в дополнительном коде: |X+| + 10 - |X-| = 10, если в разрядной сетке ЭВМ нет второго знакового разряда, то это переполнение теряется, и в знаковом разряде будет только нуль.

Важная особенность в получении дополнительного кода отрицательного числа состоит в следующем:

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

Рассмотрим на примерах выполнение операции сложения двух чисел с разными знаками.

Возможны следующие случаи:

1. X+ + Y+ = S+

2. X+ + Y- = S+

3. X+ + Y- = S-

4. X- + Y- = S-

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

Положим n = 3, 1 - знаковый разряд и 2 - цифровых.

1. X+ = 0, 10

2. Y+ = 0, 01

В дополнительном коде

То есть, нет никаких особенностей.

3. X+ = 0, 10

4. Y- = -0, 01

В дополнительном коде

Переполнение теряется и получается верный результат.

5. X+ = 0, 01

6. Y- = -0, 11

В дополнительном коде

7. X- = -0, 10

8. Y- = -0, 01

В дополнительном коде

Возникающее переполнение теряется и общий результат отрицательный.

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

 
Обратный код Обратным называется код, для которого в знаковом разряде положительного числа пишется " 0", в цифровых - модуль числа, а для отрицательного - в знаковом разряде пишется единица, в цифровых - инвертированные разряды исходного числа. Определим диапазоны чисел: X+ min = 0, 00...0 - положительный нуль. X+ max = 0, 111...1 = 1 - 2-n X- min = 1, 11...1 0 = 2 - 2-n+1 X- max = 1, 00...00 = 1 В обратном коде есть два изображения нуля: " Положительный" нуль: [X]ок = 0, 0...0 и " отрицательный" нуль: [X]ок = 1, 11...11 При этом X - X = [X+]ок + [X-]ок = |X+| + 10 - (10)-n - |X-| = +10 - (10)-n = 0 То есть, единица переноса в знаковом разряде эквивалентна единице младшего разряда. Поэтому при выполнении операции сложения-вычитания необходимо возникающий перенос циклически прибавлять в младший разряд частичного результата. Рассмотрим прежние четыре случая, помня о том, что сумма двух слагаемых по модулю должна быть меньше единицы. 1. X+ = 0, 10 2. Y- = -0, 01 3. X+ + Y- = S+ В обратном коде: Возникающее переполнение должно быть добавлено к младшему разряду частичной суммы. 4. X+ = 0, 10 5. Y+ = +0, 01 6. X+ + Y+ = S+ В обратном коде: Нет никаких особенностей по сравнению с прямым кодом. 7. X+ = 0, 01 8. Y- = -0, 10 9. X+ + Y- = S- В обратном коде: То есть, не возникает циклического переноса. 10. X- = -0, 01 11. Y- = -0, 10 12. X- + Y- = S- В обратном коде: Возникает переполнение знакового разряда, которое добавляется в младший разряд частичной суммы. Заметим, что получение обратного кода проще, чем дополнительного. Это поразрядно выполняемая микрооперация инверсии кода. Как станет ясно из схемного решения, эта микрооперация выполняется так же быстро, как и передача кода. Поскольку результатом операции является совокупность результатов по всем разрядам, то данную операцию можно выполнять одновременно над всеми цифровыми разрядами числа.

 

Замечание.

Для получения произведения с точностью не ниже, чем 2-n нужно иметь только " n" – разрядную сетку.

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

Однако, известно, что числа могут быть представлены в различных кодах(это, прежде всего, отрицательные числа).

Мы уже знаем, как выполняется операция суммирования чисел (в том числе и с разными знаками).

Однако микрооперация сдвига имеет некоторые особенности:

 

Сдвиг вправо:

 

Сдвиг влево возможен только в случае, если сдвинутое число меньше единицы по модулю:

Исходные числа:

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

 

То есть при сдвиге вправо отрицательного числа старшие разряды заполняются единицами. При сдвиге влево в старшие и младшие разряды пишутся единицы.

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

Содержание

· Деление в прямом коде со сдвигом и автоматическим восстановлением остатка

· Деление в прямом коде со сдвигом делителя и автоматическим восстановлением остатка

· Деление в дополнительном (обратном) кодах со сдвигом и автоматическим восстановлением остатка

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

o Умножение:

o Деление

o Сложение и вычитание

· Десятичные двоично-кодированные системы.

Реализация операции деления в ЭВМ в двоичной системе счисления выполняется проще, чем в десятичной. Это объясняется тем, что при определении каждой цифры частного нужно сделать только одну пробу.

Если числа X и Y заданы в прямом коде, и они представлены с фиксированной запятой, то для выполнения деления используются два основных алгоритма:

· со сдвигом и автоматическим восстановлением остатка;

· со сдвигом делителя и автоматическим восстановлением остатка.

Пусть: [X]пк = sign X. x1x2..xn

[Y]пк = sign Y. y1y2..yn

[Z]пк = [X]пк/[Y]пк = sign Z. z1z2..zn

X и Y должны быть такими, чтобы:

|Z| < 1 (то есть фиксированная запятая )

Деление

В основном аналогично умножению:

X = 2mx * sign X.x1x2...xn

Y = 2my * sign Y.y1y2...yn

Z = X/Y = 2mx–my * sign Z.z1z2...zn

Порядок выполнения операции следующий:

  1. Находится по известным правилам знак частного.
  2. Порядок частного находится как разность порядков делимого и делителя.
  3. Цифры частного находятся так:

вначале находится целая часть мантиссы, то есть

Если , если , то z0 = 0.

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

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

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

Сложение и вычитание

Обе операции выполняются по сходным алгоритмам.

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

  1. Находится разность порядков:
  2. Производится выравнивание порядков, при этом если разность порядков положительна, то в качестве порядка результата берётся mx, а мантисса My сдвигается вправо на |mx– my| разрядов; еcли разрядность порядков отрицательна, то денормализуется мантисса Mx.
  3. Производится алгебраическое суммирование мантисс слагаемых.
  4. Выполняется нормализация влево или вправо на соответствующее число разрядов с необходимым исправлением порядка.

Пример:

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

[mx]пк = 0.11 [Mx]пк = 0.1010

[my]пк = 0.10 [My]пк = 0.1110

Находим разность порядков:

+00.11 = [mx]мок

11.01 = [-my]мок

1| 00.00

|_ _-> 1

00.01 = - разность порядков.

Так как m x > my, то:

+00.1010 = [Mx]мок

00.0111 = [My]мок * 2-1

[Z]мок = 01.0001 – переполнение

2-1 * [Z]мок = 00.1000 – нормализация

max(mx, my) = [mx]мок = +00.11

[1]мок = 00.01

[mx]мок = 01.00 – переполнение порядка

Z = .

При выполнении операции сложения возможны следующие специфические случаи, называемые блокировками:

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

В качестве результата берётся максимальное число.

Пример:

[mx]ок = 0.101 [Mx]ок = 0.10111101

[my]ок = 1.001 [My]ок = 0.10000001

Разность порядков:

+00.101 = [mx]мок

00.110 = [-my]мок

– то есть это число 11 10, а в разрядной сетке мантиссы только 8 разрядов.

Поэтому операция блокируется, а результатом является число:

[mx] = 0.101 [Mx] = 0.10111101

Аналогичный случай может быть, когда разность порядков – отрицательна (отрицательное переполнение). В этом случае операция также блокируется, а результатом будет число с максимальным порядком.

Пример:

[mx]ок = 1.010 [Mx]ок = 1.10101011

[my]ок = 0.110 [My]ок = 1.11111111

Разность порядков:

+ 11.010 = [mx]мок

11.001 = [-my]мок

_______

+1| 10.011

_______

10.100 =

То есть разность порядков меньше (-8).

Операция блокируется, а результатом будет число:

[my]ок = 0.110 [My]ок = 1.11111111

Фиксированная запятая

Оговоримся, что разрядная сетка машины имеет постоянное число разрядов - n.

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

|X| < 1

Введём две характеристики чисел: диапазон изменения и точность представления.

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

Отличное от нуля самое малое число:

Таким образом, диапазон чисел, с которыми работает ЭВМ, есть:

|X|min < = |X| < = |X|max

2-n < = |X| < = 1 - 2-n

Иными словами, числа, которые выходят за диапазон изменения, в ЭВМ не могут быть представлены точно. Если

|X| < |X|min = 2-n,

то такое число воспринимается как нуль.

Если: |X| > |X|max = 1- 2-n,

то такое число воспринимается как бесконечно большое. Этим двум случаям соответствуют понятия машинного нуля и машинной бесконечности.

При оптимальном округлении абсолютная ошибка:

Минимальная относительная ошибка:

так как при большом " n "

Максимальная относительная ошибка:

Ошибка представления числа зависит от величины самого числа и способа округления:

Заметим, что для малых чисел ошибка может достигать большой величины.

 

Плавающая запятая

В ЭВМ с плавающей запятой число представляется в виде:

X = ± Mx * q±p,

где: Mx - мантисса числа;

q - основание системы счисления;

p - порядок.

Разрядная сетка машины принимает следующий вид:

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

Пусть " m " разрядов отведено под изображение мантиссы, а " k " разрядов под изображение порядка. Тогда для двоичной системы и нормализованного вида числа:

q = 2;

0, 1 < = Mx < 1 - нормализованная мантисса.

То есть диапазон чисел:

Абсолютная ошибка представления числа в ЭВМ с плавающей запятой равна:

Так как

2-1 < = |Mx| < = 1-2-m,

то минимальная относительная ошибка:

а максимальная относительная ошибка:

Видно, что относительная ошибка в ЭВМ с плавающей запятой не зависит от порядка числа. При этом точность представления больших и малых чисел изменяется незначительно.

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

 

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

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

  • сложение
  • сдвиг
  • передача
  • преобразование кодов.

Сложение выполняется по правилам сложения чисел в позиционных системах счисления.

То есть эта операция выполняется поразрядно, а возникающий в младших разрядах перенос направляется в старшие разряды.

Пример:

0, 101101 1-ое слагаемое

+0, 000101 2-ое слагаемое

________

0, 101000 сумма

0, 00101 перенос

________

0, 100010 сумма

0, 01 перенос

________

0, 110010 сумма

Операции сложения производятся одновременно над всеми разрядами двух слагаемых и продолжаются до тех пор, пока возникают переносы. Возникающие переносы приводят к продолжению операции. Это одна из особенностей позиционных систем. Видим, что собственно операция определения частичной суммы слагаемых выполняется в один приём, а возникающие переносы распространяются на всё более старшие разряды.

Сдвиг

Различают два вида микрооперации сдвига:

  • логический сдвиг;
  • арифметический сдвиг;

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

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

Передача.

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

Различают два вида передач:

  • запись (с разрушением ранее записанной информации);
  • чтение (без разрушения).

Преобразование.

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

 


Поделиться:



Последнее изменение этой страницы: 2017-03-15; Просмотров: 613; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.117 с.)
Главная | Случайная страница | Обратная связь