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

 

Сложение десятичных чисел в ЭВМ

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

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

Следует помнить, что дополнение числа в двоично-десятичном коде осуществляется путем инвертирования значений двоичных разрядов в тетрадах с прибавлением единицы в младший двоичный разряд младшей тетрады по правилам двоичной арифметики. Такое дополнение получается с потетрадным избытком шесть. Поэтому, если при сложении нет переносов из каких-либо тетрад, то после выполнения сложения они должны корректироваться путем вычитания из каждой тетрады числа 6, то есть прибавления кода 1010, являющегося дополнением 6 до 16. Наличие переноса из старшей тетрады при сложении операндов с различными знаками свидетельствует о том, что результат получился в прямом коде, а отсутствие переноса свидетельствует о том, что результат получился в дополнительном коде.

Пример.

Сложить два десятичных числа и .

Естественные двоично-десятичные коды чисел и соответственно будут иметь вид и .

Образуем дополнение числа – 78 до 102 с избытком 6 в каждой тетраде путем инверсии разрядов кода 0111 1000 и прибавлением 1 в младший разряд младшей тетрады, тогда

1000 1000 = [Y]доп.(с избытком 6).

Теперь, опуская для простоты знаковые разряды, произведем сложение кода X с кодом [Y]доп., помня, при этом, что для положительных чисел прямой и дополнительный коды совпадают

1001 0101 X

+ 1000 1000 [Y]доп. (с избытком 6)

← 0001 1101 [X+Y]пр. (сумма в прямом коде

с избытком в первой тетраде)

+ 0000 1010 коррекция

0001 0111 Х + Y = 17 (истинное значение суммы).

Пример.

 

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

В естественной двоично-десятичной форме записи .

[Y] доп. (с избытком 6) равно 0111 1101, тогда операция вычитания реализуется следующим образом:

 

0110 0111 X

+ 0111 1101 [Y]доп. (с избытком 6)

1110 1101 [X+Y]доп. (с избытком 6)

Перенос из стареющей тетрады отсутствует,

+ следовательно сумма отрицательная.

1010 0000 коррекция

1000 0100 [X-Y] доп. (без избытка 6 в тетрадах).

Перевод суммы в прямой код.

0111 1100 [X-Y] пр. (с избытком 6 в каждой тетраде)

+ 1010 1010 коррекция

0001 0110 X – Y= – 16 (истинное значение суммы).

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

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

Умножение и деление десятичных чисел в ЭВМ реализуется сложнее, чем соответствующие операции с двоичными числами. Рассмотрим эти операции ниже.

 



li>26
  • 27
  • Далее ⇒