![]() | |
НПО Системы Безопасности (499)340-94-73 График работы: ПН-ПТ: 10:00-19:00 СБ-ВС: выходной ![]() ![]() |
Главная » Периодика » Безопасность 0 ... 24252627282930 ... 101 Полученный после умножения код числа имеет 2п разрядов. Как правило, его приходится округлять до п разрядов, так как разрядная сетка машины содержит не более п разрядов. Для правильности округления в сумматоре надо иметь по крайней мере п + 2 разряда. Все сдвиги, выводящие за эти разряды, можно попросту терять, экономя время суммирования. Поэтому умножение со сдвигами слева направо (умножение, начиная со старших разрядов множителя) может оказаться более выгодным, чем умножение по обычной схеме. Однако в большинстве существующих вычислительных "машин использована схема умножения, позволяющая получить все 2/гразрядов произведения. Делается это в целях повышения точности расчетов, так как округление при умножении дает быстрое накопление погрешности (см. § 1.8). Числа, имеющие 2п разрядов, записываются при этом в две ячейки памяти, а для работы с ними используются специальные программы, организующие операции над числами удвоенной длины. Отметим еще, что при необходимости получения произведения*, имеющего 2п разрядов, при использовании обычной схемы умножения можно иметь сумматор не длины 2п, как это "показано на рис. 1.9, а длины п. В этом случае при сдвиге сумматора цифры из его младшего разряда должны записываться на место сдвинутых цифр в регистр множителя. Соответствующая цепь показана на рис. 1.9 пунктиром. Как следует из вышеприведенных примеров, для умножения чисел* в, машине выгодно использовать представление числовой информации в прямом коде-: Но как было показано в § 1.4, прямой код неудобен для реализации операции алгебраического сложения. Операцию сложения-вычитания эффективнее производить в дополнительном или обратном кодах. Эта коллизия приводит к необходимости рассмотрения возможности получения произведения непосредственно в дополнительном или обратном коде без перевода сомножителей и произведения (если они отрицательны) из дополнительного или обратного кода в прямой код и обратного перевода. Рассмотрим этот вопрос для дополнительного кода. Для обратного кода все рассуждения и выводы ана- логичны. Пусть необходимо реализовать специдльнухо операцию умножения, для которой была бы справедлива формула [л;]д (х) fj/ja. = [ху]д . Рассмотрим все возможные комбинации знаков, которые могут встретиться при умножении чисел в дополнительных кодах. 1. хи у положительны. В этом случае [л:1д (х) [;]д 2. X положителен, а у отрицателен. В этом случае ]л;]д (В) [У]а =x{S+y) = Sx + xy п для получения правильного ответа необходима поправка - Sx + S. 3. x отрицателен, а у положителен. В этом случае-Мд (X) [y]j = (5 + х)у = 8у + хуи для получения правильного ответа требуется поправка- 5у + 5. 4. х и Jотрицательны. В этом случае [х\а (х) [;]д == =.iS + x)XiS + y)S + S{x+y) + xy и необходима поправка - S - S{x+y). Таким образом, логика операции умножения должна определяться соотношениями следующего вида X [у]л , х>0, у>0, [>]дХЫд~5, л>0, у<0, МдХЫд-5,, х<0, у>0, {xhX[yh-S{x+y), х<0, у<0. (1.8) Так как в сумматоре дополнительного кода нет места для записи и 5, то в соотношении (1.8). поправки имеют несколько .иной вид, чем при вышеприведенных рассуждениях. Пример 1.38. Перемножить в дополнительном коде I (x)io = 0,32 и (j)io= -0,4. Переходя к дополнитель-; ным кодам, пЬлучим [х]д == 0.32 и \у]в, = 9.6. Далее X 96 , 192 + 288 ; 3072 Результат умножения есть 3,072. Так как имеет место-случай л: > О, у < О, то на основании (1.8) необходима поправка - 10х. Умножение на 10 эквивалентно сдвигу-л; на один разряд влево. Записываем -л; дополнительным кодом, получаем [-л;], = 9.68. Сдвигаем эта выражение на один разряд влево, причем девятка из левого разряда пропадает (сдвиг происходит на сумматоре дополнительного кода), и прибавляем поправку к полученному произведению , 3072 + 6 800 9.892 [а:3]д = 9.872, <Ж)>,о = -0,128. Легко проверить непосредственным перемножением исходных чисел, что полученный нами результат соответствует истинному. Перейдем теперь к рассмотрению умножения в полулогарифмической форме. Правила умножения для такого представления числовой информации выглядят следующим образом. 1. Порядки сомножителей суммируются с учетом * знака. 2. Мантиссы перемножаются по правилам умножения чисел в естественной форме. 3. Проверяется наличие нарушения нормализации вправо. Отметим, что нарушение нормализации вправо возможно только на один разряд, так как исход- ♦*ные мантиссы нормализованы. Нарушения нормализации влево при умножении произойти не может, так как мантиссы по модулю меньше единицы. 4. Если нарушение нормализации вправо имеется, то оно устраняется сдвигом результирующей мантиссы на Ъдин разряд влево и уменьшением суммарного порядка на единицу. 5. Произведению приписывается суммарный порядок сомножителей (или суммарный порядок, уменьшенный на единицу при наличии нарушения нормализации вправо у результирующей мантиссы). Пример 1.39 Перемножить числа (л:)5=5-0,2101 и (j)5 = 5"-0,1022 в симметричной пятирично й системе. Суммируем порядки сомножителей: 2+1 = 1. Теперь перемножаем мантиссы .у 2101 - • -1022 2101 0000 11202 • - . .11202 • " 2011222" . - 0 ... 24252627282930 ... 101 |