Page 41

ПРО

№13 (апрель) 2011

граммист

АЛГОРИТМЫ вали

какое

первый

операнд,

значение

имеет

помните? число

Поэтому,

разрядов

в

дробной части результата никому неизвестно. Это

число

нужно

первого операнда).

перенести

вручную

(из

10. Сбросим незначащие разряды слева. Гашение незначащих нулей на тот случай, если нет необходимости в пункте 8.

Вот такая вот промежуточная ступенька в

операции умножения. Теперь само умножение двух длинных чисел: здесь нам потребуется еще

одно

длинное

число

для

Теперь

алгоритм

пошагово

рассмотрим

сам

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

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

2. Выравняем множители. Результат выравнивать

нет

необходимости:

понятно ниже по алгоритму.

почему

будет

хранения

3. Получим количество разрядов в операнде.

немного отклонился от школьного умножения

хоть из первого, хоть из второго операнда.

промежуточного результата. Дело в том, что я в столбик. Давайте рассмотрим на примере:

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

4. Умножаем столбиком в цикле. Здесь нам

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

промежуточных

складываем.

Для

результатов,

экономии

а

памяти

(числа могут быть очень длинные, сотни и тысячи

разрядов

помните?),

я

немного

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

4.1. Получим очередной разряд второго операнда.

Нам

необходимо

последовательно

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

4.2. Поразрядное умножение. Для этого мы воспользуемся алгоритмом разряд.

уже

рассмотренным

умножения

любого

выше

числа

на

4.3. Осуществим сдвиг запятой. Именно для

этого нам и нужна была дополнительная переменная,

нам

нужно

было

где-то

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

Шаг 2

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

том, что нам необходимо учитывать тот факт, Шаг 3

что второй операнд тоже может содержать дробную часть.

Сделать это можно так: Число

разрядов

в

дробной

части

41

PROgrammist, №13  

Official editorial layout

PROgrammist, №13  

Official editorial layout

Advertisement