PROgrammist, №12

Page 18

ПРО

АРИФМЕТИКА ДЛИННЫХ ЧИСЕЛ

№12 (март) 2011

граммист

6.4. Осуществляем анализ результата. Дело в том, что мы храним число в виде разрядов.

Однако, возможна ситуация когда получится

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

сложение.

Таким

образом,

незначащие

нули

увеличивают время необходимое на сложение

длинных чисел. Да и незначащие нули занимают

байты, а у нас хранение чисел и так реализовано не самым эффективным образом.

нам необходимо взять только младший разряд

Вычитание

никогда

Практически полностью аналогично сложению,

двухзначного

числа.

не

разряд

превысит

можно

результата

следующего

К

19,

получить,

10.

счастью,

поэтому

если

младший

вычесть

Соответственно

шага

результат

перенос

сложения

будет

из

для

равен

единице. Если же результат сложения разрядов

будет менее 10, тогда все в порядке – результат содержит

всего

осуществлять

нет

один

разряд

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

следующий перенос равен нулю). 6.5.

Далее

в

соответствующий

и

перенос

(то

есть

разряд

ре-

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

После

закончились,

того

как

разряды

остался

завершающий

чисел этап

сложения. Необходимо учесть перенос сложения самых

старших

запишем

его

в

разрядов

старший

операндов. разряд

Просто

результата

(помните пункт 4?). В зависимости от того, каким

образом реализована запись разрядов в байтовой последовательности, всегда

(если

байтовую

перенос

скорость

можно

записи

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

вносить

разрядов

нас

в

полностью

устраивает), а можно сначала проверять есть ли

за исключением переноса. Здесь перенос не

добавляется, а вычитается из разряда первого операнда.

Ну

и

последний

шаг

это

нужно по

данный

число

с

большим

смотри

пункт

3),

то

время

разрядов в самом большом числе. То есть, чем меньше

разрядов

АЛГОРИТМЫ

в

числах,

тем

быстрей

не

больше

первого

это

– 0 (перенос для самых младших разрядов равен

нулю). Вторая операция так 1 – 0 – 1 (перенос из младшего разряда). Вот алгоритм: •

выровняем

оба

числа

относительно

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

рассматриваем

частный

случай,

когда

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

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

нулем

(что

еще

реже)

мы

договорились, что второй операнд не может •

быть больше первого; подготовим

результат.

Аналогично

сложе-

нию, однако далее мы не будем добавлять разряд,

на

сложения напрямую зависит от того, сколько

модулю

Текущая же операция будет выглядеть так 13 – 6

поразрядные операции над результатом (первым операндом,

второй

единицы. И следующий перенос будет единица.

количеством

Если учесть что сам процесс сложения – это

что

числа не хватает, то вычитаем из 13, а не из

не

незначащих нулей перед значащими разрядами.

уверенным,

случае 13 – 06. Поскольку в младшем разряде

многочисленных сложений (например, в цикле), получите

всегда

осуществлен всегда. Например, 13 – 6, в нашем

обязателен, однако есть вероятность, что после Вы

быть

собой). Это гарантирует нам, что перенос будет

гашение

пункт

операция

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

он там есть, то есть когда последний перенос был Вообще-то

сложение,

Пока будем считать, что второй операнд всегда

пункту 7 – гасить нуль можно лишь тогда когда нуля.

и

операнд по модулю всегда не больше первого.

незначащего нуля. Также можно привязать к больше

как

пока рассматриваем беззнаковое вычитание, то

он (то есть перенос больше нуля). 8.

Также

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

поскольку

природа

вычитания

такова, что не образует новых разрядов в •

результирующем числе; определим

число

разрядов

во

втором

операнде. Нужно для поразрядного вычи-

СОДЕРЖАНИЕ

18


Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.