книги из ГПНТБ / Основы теории алгоритмов учеб. пособие
.pdf— но -
На верхнем уровне рассматриваются различные численные методы решения задачи. Для каждого численного метода на сред нем уровне составляются различные структуры. Низший уровень представляет ообой разработку программы :с различной сложнос тью для каждой структуры.
4.3. Алгоритмы типа накопления
В данном параграфе рассматривается вопрос проектиро вания эффективных алгоритмов для случая многократного сложе ния нескольких чисел или образована i оушы отдельных одно значных слов слагаемых для' дополнительных чодов представле ния чисел в памяти машины. Однако общие принципы проектиро вания могут быть распространены и яа алгоритмы накопления оумыу для прямого и обратного кодов представления чисел.
Сложение 2-х чисел с повышенной точностью требует про граммной реализации итерационной последовательности (4.12). 1При этом число команд, реализующих одну итерацию, может быть 1различно я зависит от выбранной структуры команд. Условимся,;
'что действие одной команды програшы связано о однтм обраще нием к памяти машины. Тогда минимальная програша сложения 2-х однозначных слов не может быть меньше 3-х команд. Приме рами таких щюграиы явяяютоя (4.22) и (4.23), где, соглас
но (4.24)* Ь * 3 и |
|
|
|
|
t |
c 3A k |
t |
o “ |
• |
Для сложения трех чисел с к -значной точностью н е - ’ обходимо два рава обратиться к программе сложения 2-х чи-
|
|
|
|
- |
Ill - |
|
|
|
|
|
|
сел, |
тогда |
|
|
|
|
|
|
|
|
|
|
|
|
|
-Ьса - |
2 '3 |
к to |
• |
|
|
|
|
|
|
Очевидно, что при сложении |
Ш |
чисел |
|
|
|
|||||
|
|
|
ir a = ( m - i ) 3 k i o . |
(4.29) |
|
||||||
|
|
|
|
|
|
|
|
|
|
||
|
Преобразуй алгоритм |
(4 .12), |
последовательно |
примененный |
|||||||
( |
пЫ |
) раз для сложения |
|
m |
чисел, к виду- |
|
|
||||
|
|
|
|
|
|
|
|
|
(4.30) |
|
|
|
|
( |
t - k , k - i , ... , 2 , |
i |
) |
|
|
|
|
|
|
где |
P i и p i-и - |
значение переноса от сложения ( t+I) |
и |
ь - х |
|||||||
слов |
соответственно, при атом |
(U * M - i |
, |
|
|
||||||
для |
Рассмотрим возможную реализацию такого вида алгоритма |
||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
Пусть |
Ш s 4 . Для реализации |
(4.S3) |
введем команда |
|
||||||
следующего содержания: |
|
|
|
|
|
|
|
|
|||
|
I. |
Специальное оложение (уоловное обозначение |
|
||||||||
По этой команде происходит сложение 2-х чисел по всем прави |
|||||||||||
лам сложения чиоел в модифицированном дополнительном коде. |
|
||||||||||
Сигнал о переполнении разрядной сетки блокируется. |
|
|
|||||||||
|
2 . специальная запись |
(условное обозначение |
© |
), |
|||||||
Операционное устройство и микропрограмма специальной запиои |
|
||||||||||
приведены соответственно на рис. |
4 .1 . и рио. |
4 .2 . |
|
|
|||||||
|
Пооледоаательнс сложим однозначные слова 4-х |
слагаемых, |
используя команду опециального' оложешя. Как показано ниве, на
примере q o .I |
I I . |
« . X I |
I I |
О 0 .1 |
I1 . . . I I |
I t |
|
О 0,1 |
I I |
. * . I I |
I I |
0 0 .1 |
II . . . I I |
I I |
|
1 I. II I . . . I I |
о о . ’ , |
сложение 4-х макоимальинх по величине слов дает 3 единицы пе реноса, которые зафиксируются в знаковых разрядах.
- 112 -
|
а |
Рио* 4,2 |
|
Применяя к полученной сумме команд;, |
специальной записи |
( \\— |
), перепишем единицы перенооа из |
знаковых разрядов |
в младшие разряды сумматора. Очевидно, что последующее сложе
ние данного переноса со словами ( |
Ь-х) 4.-х слагаемых может |
|
||||
также дать не больше, чем 3 единицы переноса, которые также |
|
|||||
зафиксируются в |
знаковых разрядах. |
Продолжая таким образом |
|
|||
последовательное |
сложение однозначных слов от l * k до |
, |
||||
запишем алгоритм получения |
% |
: |
|
|||
для |
о - к |
имеем |
i* |
|
|
|
|
|
|
< £ > © % к |
|
|
|
|
L - K - i |
|
< £ > К = Ф <.*•+#*+¥,♦¥«■)* ; |
|
||
ДЛЯ |
, |
К -2 |
з , 2 |
|
|
< 1 > © * Р Н
< 1 > |* = м « е ,+ < г г + & 4 * 4) .
|
|
|
|
|
|
|
|
|
|
|
|
|
(4.31) |
для |
L ж I |
|
|
< т у © ч > « |
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
< 5 > © < Р м |
|
|
|
|
|
|
||
|
|
|
|
|
< £ > Ф ¥ и |
|
|
|
|
|
|
||
|
|
|
|
|
< S > © V * i |
|
|
|
|
|
|
||
|
|
|
|
|
< 1 > - К « |+ & + < Ь + * 4 ) < . |
|
|
||||||
|
Сравним показатели -fc |
для алгоритмов (4.22), |
(4.23) |
||||||||||
и алгоритма |
(4 .31). |
Йз |
(4.31) следует, |
что для олокения 4-х |
|||||||||
однозначных олов требуется 5 простых операций. Тогда время |
|||||||||||||
сложения 4-х чноел о |
|
к -значной точностью при использования, |
|||||||||||
метода накопления суммы |
|
|
|
|
|
|
|
||||||
|
|
|
|
|
^ 4« - 5 k 4 e . |
|
|
|
|
(4. 32) |
|||
Для |
|
б* |
согласно |
(4 .29), |
получим |
|
|
|
|
|
|
||
|
|
|
|
|
« |
4- |
5( (‘ 6i |
) |
o |
54t |
o = |
|
. |
|
Для алгоритма |
(4.31) |
из (4.32) |
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
= 3 0 1с |
|
|
|
||
|
Абсолютный выигрыш во времени |
Д t |
ж2 А Ьо f что при |
||||||||||
мерно составляет |
44,4$. |
|
|
|
|
|
|
|
т >А |
||||
|
В общем случае, |
если требуется накопить сумму |
|||||||||||
чисел, |
необходимо ввести Ц знаковых разрядов для фиксиро |
||||||||||||
вания |
( |
ж - I ) |
возможных переносов» |
При этом |
CJ. |
внбираетоя |
|||||||
из условия |
|
|
|
|
2 %. |
|
|
|
|
|
|
||
|
|
|
|
iV < < |
№ 4 |
|
|
|
|
(4.33) |
|||
|
|
|
|
|
|
|
|
|
|
|
|
||
Здесь вводятся специальная команда засылки по |
|
-знаковым" |
|||||||||||
разрядам |
( |
==> |
), |
которая ооущеотвляет'запиоь цифровнх |
- 114 -
разрядов в память машины, а содержимое |
- знаковых равря-j |
|
дев пврешюыв&в* в младше разряды сумматора. Операционная |
! |
|
часть прадотавхена на рио.4.3, а микропрограмма команды <Х ^ |
I |
|
- на рис^ 4 .4 . |
г |
|
Алгоритм сложения Щ чисел о |
к —значиой точностью |
|
будет» для l« k |
|
! |
<£ > © ^ к (J - 2,3,..,»»!)
*< 1 > Я г = Н £ « ^ ) к ,
длл U k - f , * 4 5,2. |
|
|
|
F ‘ 4 |
' |
|
|
<иЕ .>© Ф |С |
( 1 , 2 , ! . . , |
m ) |
|
||||
|
|
|
|
; |
|
|
( . . и ) |
для i » 1 |
|
|
% |
|
|
|
. |
< I > ® |
|
|
|
||||
< I > + |
Y i * |
|
|
|
|
||
|
|
|
r< |
4 |
|
|
|
Время сложения |
W |
чиоел о |
к -аначной точностью оа- |
||||
раделится ив выражения |
|
|
|
|
|
|
|
I * |
|
( m + i ) k ' t o . |
|
|
|
||
"Ьшн ~ |
|
|
(4.35) |
||||
Абсолютный выигрыш во времени |
|
|
|
||||
|
|
|
|
||||
д £ т |
|
|
= ( m- f ) З |
Н |
о |
„ |
|
* 2 k |
Cm-2) t o . |
|
|
|
i |
||
Относительный выигрыш |
|
|
|
|
|
|
|
|
- |
|
2 k ( m - 2 ) t o _ |
|
|
|
|
i * |
|
|
3K(m-<)to “ |
I V a m / - |
|||
График зависимости |
o tm |
|
от m |
предотавлен иа рио* 4.5, где |
|||
|
|
- П5 -
PrS п т
* 4 * |
1 2 * * * |
п- |
* 4 « М |
п |
( Ц ~ { ) |
||||
-----ТУ |
|
|
|
|
"ZT
У2 |
УО |
У4 |
Рио. |
4.3 |
|
Ряс. 4.4
1
- 116
k m j t m - U n i |
( l |
- |
£ - 0,,6)6 ( e-) . |
1 |
Покажем относительныйвыигрышв объеме программы. П ре-' |
|
|||
водя вооледевательное сложениечисел, получйы |
|
|||
dwi — 3 k ( / И - 0 * |
|
команд,1 |
|
|
Используя метод накопления суш , |
|
|
|
Относительный выигрыш в объеме памяти соотавия
5 d « « Д * О М - к ( м + о |
|
|
||
Отевда |
а к С т - 0 |
Aiс |
|
|
|
|
|
||
t i m $ c U |
=» tim |
2 К ~ |
т = l |
s 0, 66. |
м -*<* |
|
З к |
т |
|
|
|
ж |
|
|
Таким образом, при W —т 00 |
относительный выигрши в |
|||
•бьеме памяти составляет 66$. |
|
|
|
|
Если частичные суши членов ряда могут превышать едини |
||||
цу, то алгоритм (4.34) |
даот верный результат при условии, что |
|||
общий результат ве переполняет разрядную оетку, |
т.е. |
- 117 -
(4.36)
Это обеспечивается введением специальной команды олокеаня, по
которой блокируется оигнал |
| |
о переполнения разрядной |
||||
ветки. Например, сложим 4 числа о удвоенной точностью. |
||||||
ф < * + |
0,1101 |
ип |
Ф<4= |
OO.IIOI |
в 00.1Щ |
|
фд.« + 0,1110 |
0101 |
Ф»4* |
OO.IIIO |
Ф и * |
00.0101 |
|
ф| ж + |
0,0001 |
оно |
% ,» |
00.0001 |
Ф и * |
00.0110 |
%• - |
ОДНО 0101 |
|
I I .0001 |
ф * - ОО.ЮИ |
||
г - + |
0,11100101 ( |
£ = 0 ). |
|
|
||
Алгоритм |
|
0 |
|
|
|
|
Ф и -+ Z |
|
|
|
|||
|
|
|
|
|
||
|
|
< £ > © |
Фи. |
|
|
|
|
|
< £ > © «Ям |
|
|
|
< £ > «= > ( Г Ч ^ а < £ > © ф / < Х > ф Ф м
< £ > © Ф * < £ > + ¥ * 4 < £ > - » ■ (
Проведен олокенио чисел ооглаоно алгоритму; 'fit ~ 0 0 ‘. 4 Ш
ФVax « О О. OtCI
©0 1 . 0 1 0 0
Ф»з * 0 0 . 0 1 1 0
Фо Г Ш 0
юн
ш
Lb
<X>*oo*ooli
<f44»0 0 . n 0 1
- |
118 - |
|
|
© |
O O . I I H |
|
|
Mil = oo. m o |
o |
t |
|
© |
о j . h |
o o . o o o i
oififO
=1 1 . 0001
oo:-H н
= oo.un.
В приведенном примере при сложении старших частей во
2-й и 3-й частичной сумме налицо переполнение, |
однако сигнал |
||
| = 1 |
блокируется, т .к , сложение осуществляется по специа |
||
льной команде. Четвертая частичная сумма есть |
старшая часть |
||
результата. |
Она не имеет переполнения и по команде обычного |
||
сложения машиной будет отработан сигнал |
| |
= О. |
Если в (4.30) условие (4.36) не всегда выполняется, то для олучая
сигнал |
jj |
о переполи един разрядной сетки |
аудет равен нулю. |
||||
|
Отсвда |
следует, что для правильного контроля переполне |
|||||
ния разрядной |
сетки, |
если может быть (4 .37), |
необходимо накап |
||||
ливать сумму ( |
W - |
I) |
чисел. При атом Р< |
т - 2 |
, а ^ |
||
выбирается из условия |
(4 .33). |
|
|
||||
|
Данный метод накопления суммы можно применить и для чи- |
||||||
оел *fj |
( j |
= |
1 , 2 , . . . , |
m ), где необходимо провести |
ряд сло |
жений и вычитаний. Введение специальных команд вычитания позволит свести время реализации к (4 .3 5 ).
Для прямых и обратных кодов представления чисел алгоритм накопления суммы будет сложнее, т .к . потребует учета сушарного циклического переноса и операции присвоения знака младшим чаотям.
- 119 -
4 . 4 , |
Алгоритмы вы числения линейных Функций |
||||
На практике часто приходится решать задачи, в состав ко |
|||||
торых входит линейная функция типа |
Л * Q &+ 6 |
. Такими |
|||
задачами могут быть задачи вычисления элементарных функций, |
|||||
представленных полиномами степени |
р |
, |
или различные многочле |
||
ны. Как правило, |
при вычислении на машине полиномы приводятся |
||||
к схеме Горнера, где линейная функция |
Л |
есть отдельный |
|||
участок, к которому обращается |
Р |
|
раз. |
|
Повышенная точность вычисления линейной функции может быть реализована алгоритмами умножения в отдельности. При этом время реализации линейной функции из (4.24) и (4.27) бу дет
га-£КуцН+-Ьсл ■■ k m ^ o t k t i o * k ( k m + E ) t o ^
Для уменьшения времени Ь я воспользуемся методом на копления суммы однозначных слов частичных произведений и соот
ветствующих олов коэффициента |
|
6 |
й |
, |
|
|
||
Перемножение длинных чисел |
и ofr даст |
к |
чао- |
|||||
тичных произведений . |
|
|
|
|
|
|
||
( с и г - ‘" Щ 2 ' ,н) - ( < » * W o г - <“ * -0 "+ |
(4.39) |
|
||||||
|
|
|
|
|
|
|
|
|
+ ( а з £ ) ( ^ ) Г |
^ > и | |
|
|
|
j* 1,2,...,к ) , |
|
||
при вложении которых получим произведение |
|
|
||||||
|
|
м |
|
|
|
|
|
|
|
|
П - 1 П |
. 2 |
- |
' " |
|
|
|
Для 'Р * |
1 , 2 , . . . , к |
аз |
(4.39) |
можно найти |
241-i |
|
||
олов частичных произведений. Отбрасывав олова, меньше, чем |
|
|||||||
2 Ч J |
, |
сложим однозначные олова частичных произ |
||||||
ведений я олова коэффициента |
6 |
|
Но методу накопления оуммы: |
|||||
для |
шеей |
|
|
|
|
|
|
+0-10... 0 0 =* Р(к+0+П(к+0 •4.40)