Арифметические операции

Базовая операция сложения

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

s1.gif (3277 bytes)

Здесь Q - основание системы счисления, a и b - цифры одного разряда слагаемых.

s2.gif (3912 bytes)

Если S > q или S = q, то значение суммы ориентируется на значение q. А блок 7 устанавливает для следующего разряда единичное значение (появляется перенос в следующие разряды).

s3.gif (3810 bytes)

Блок 4 организует цикл из N операций, а блок 5 обращается к алгоритму 1 и сообщает ему в качестве исходных данных цифры i-того разряда А и В, а возвращает перенос и знак суммы.

Считается, что результат имеет длину N, то есть перенос из N-ого разряда в N+1-ый игнорируется.

Пример:

23410 = 0.234пр = 0.234об = 0.234дп
-72610 = 9.726пр = 9.273об = 9.274дп
-49210 = 9.492пр = 9.507об = 9.508дп = 9.492пр = -49210

Пример:

-23410 = 99.234пр = 99.765234об = 99.766дп
-72610 = 99.726пр = 99.273об = 99.274дп
-96010 = 99.960пр = 99.039об = 99.960пр = -96010

Несовпадение знаковых разрядов указывает на переполнение разрядной сетки.

Сложение чисел с плавающей точкой

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

А = m1*qр1

В = m2*qр2

где m1, m2 - мантиссы, р1 и р2 - порядки.

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

Робщ = max ( p1*p2 )

В = (m2`)*qробщ

C = A+B = m*qp = m1*qробщ+ m2`*qробщ= (m1+(m2`))*qробщ

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

Пример:

0.4726*102 + 0.9132*100 = 102(0.4726 + 0.0091) = 0.4817*102
0.10112*2-1 + 0.10112*21 = 21*(00.00102 + 00.11012) = 01.00002*21 = 0.10002*22

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

При сложении чисел в нормальной форме можно выделить 4 этапа:

  1. Уравниваются порядки слагаемых. Меньший порядок увеличивается до большего, а мантисса преобразуемого числа сдвигается вправо на соответствующее число разрядов. С этой целью производится вычитание порядков чисел. Знак и модуль разности будут определять, соответственно, какое из слагаемых нужно преобразовать и на сколько нужно сдвинуть мантиссу.
  2. Производится преобразование мантисс слагаемых в один из модифицированных кодов, дополнительный или обратный, затем производится сложение мантисс по правилу сложения чисел с плавающей точкой.
  3. В случае необходимости производится нормализация результатов.
  4. Результат переводится в прямой код, ему приписывается общий порядок и округляется.

Умножение чисел

В двоичной системе счисления таблицы умножения описывают функцию коньюкции:

A B C
0 0 0
0 1 0
1 0 0
1 1 1

При умножении коньюкция составляет матрицу размером N*N.

Пусть N = 4:

        A 4 3 2 1
        B 4 3 2 1
          14      
        24   13    
      34   23   12  
    44   33   22   11
      43   32   21  
        42   31    
          41      
C 27 26 25 24 23 22 21 20

Разряды сомножителей коньюкции (с 1-го по 4-ый) обозначены двузначными числами, состоящими из номеров разряда сомножителей, а для произведения С указаны веса его разрядов от 20 до 27. Матрица имеет симметричный вид.

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

s4.gif (4496 bytes)

Здесь А и В - множители, N - их разрядность. Начальное значение суммы S устанавливается в блоке 3. В блоке 4 организуется цикл из N итераций (повторений), выполняемых за N тактов . Блок 5 разрешает работу блока 6 лишь при значении В1= 1 и реализует функцию коньюкторов, умножающих разряды множимого А на первый младший разряд Вi множителя В. Блок 7 сдвигает на 1 позицию вправо числа В и S, при этом место младшего разряда В1 множителя занимает следующий по старшинству разряд. По окончанию всех итераций блок 8 выводит S - результат умножения.

В данном способе вычисления выполняются начиная с младшего разряда множителя В с изменением взаимного положения чисел S и А путём сдвига суммы S.

Деление чисел

Операция деления выполняется над числами А - делимым и В - делителем. Её результатом является частное С и остаток D.

А = ВС + D,  |D| < В

Операция деления реализуется через многократное вычитание делителя В из делимого А. Это достигается сложением чисел в обратном и дополнительном кодах. Наиболее простой способ деления описывает алгоритм последовательного вычитания:

s5.gif (3988 bytes)

Если условие А < В не выполняется, то число А умножается на величину В, при этом значение частного увеличивается на 1 и происходит возврат к блоку 4. Если выполняется условие А < В, мы выводим частное С и остаток D.

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

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

s6.gif (5075 bytes)

Погрешности выполнения арифметических операций

Значащими цифрами числа называют все его цифры кроме нулей, стоящих левее первой отличной от нуля цифры:

0 0 0 2 3 0 0

<  Значащие цифры  > 

Абсолютная погрешность:

DA = A - [A] T 0.5qn-i+1

Погрешность не должна превышать половины единицы разряда, в котором стоит цифра Аi (самая младшая), здесь А - точное значение числа, [А] - приближённое или машинное значение, DA - абсолютная погрешность, разность между точным и приближённым значением числа .

Результат алгебраического сложения А и В имеет вид:

A + B = [A] + [B] + (DA + DB), D(A + B) = DA + DB

Для умножения получим:

AB = [A][B] + [A]DB + [B]DA + DADB
DAB = [A]DB + [B]DA

DADB как величиной второго порядка малости можно пренебречь.

Для деления:

f6.gif (872 bytes)

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

f7.gif (274 bytes)

Для сложения:

f8.gif (348 bytes)

Для умножения:

f9.gif (674 bytes)

Для деления:

f10.gif (579 bytes)

Если не выполняется строгий подсчёт погрешности, то пользуются следующими правилами:

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

Если данные можно брать с произвольной точностью, то для получения результата с n верными цифрами, исходные данные следует брать с таким числом цифр, которое, согласно предыдущим правилам, обеспечивает N+1 цифру в результате.

Контроль выполнения операций

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

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

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

При цифровом методе контрольный код числа образуется делением суммы цифр числа на выбранный модуль m.

Пример:

А = 10 mod 3

КА = 1 (mod 3)                                     Числовой модуль

А = 152 mod 3

КА = 1+5+2 = 8 mod 3 =2 (mod 3)      Цифровой модуль

Назад | Содержание | Вперед