МАТЕМАТИКА
УДК 511
С. Л. Амбарян
Алгоритм деления
с неограниченной точностью
(Представлено академиком В.С.Закаряном 18/I 2001)
Точность выполнения арифметических операций
на вычислительных системах / персональных компьютерах имеет чрезвычайно важное
значение. Можно привести множество примеров, когда данная разрядная сетка не
обеспечивает требуемую точность решения поставленной задачи. Кроме того,
некоторые исследователи науки и техники (теория чисел, криптография,
комбинаторика, теория бесконечных рядов, дифференциальные уравнения,
интегральное исчисление, атомная физика, разные направления механики, астрономия
и др.) в своих исследованиях, требующих высокой точности, просто лишены
возможности непосредственно использовать большие преимущества персональных
компьютеров из-за ограничений разрядной сетки. Поэтому в связи с широким
распространением и усовершенствованием персональных компьютеров разработка
эффективных алгоритмов и программно-аппаратных средств реализации арифметики
многократной точности (кратко а.м.т.) имеет хорошую
перспективу [1-3].
Вопросы арифметики однократной, двойной и
многократной точности исследованы многими авторами, проблемы, история и
библиография, посвященные им, великолепно изложены в [1]. А. Шенхаге и Ф.
Штрассен разработали изящный алгоритм, который умножение (деление) двух
n-разрядных чисел выполняет за 0 (n log n log log n) шагов [2].
Представление цифр-чисел в а.м.т. можно осуществить по-разному. Нами принят следующий
подход.
a. Машинное слово процессора вычислительной
системы / персонального компьютера состоит из четного
числа двоичных разрядов, равного 2(k + 1) (см. рис.1.),
один из которых выделен для знака целого числа с фиксированной точкой (точка
фиксирована после младшего разряда).
Рис. 1.
b. Основанием системы счисления p
выбрано целое число из отрезка [2, 2k].
c. Каждая
цифра а.м.т. представлена в одном полуслове как целое
положительное число.
d. Числа а.м.т. представлены как числа с плавающей точкой. Первое полуслово выделено для знака
числа, второе полуслово - для порядка числа и, наконец, начиная с третьего
полуслова в последовательных адресах оперативной памяти представлены цифры
числа (дробная часть) а.м.т. (см. рис.
2.).
|
Рис. 2.
Ограничение пункта b
равносильно тому, что в одном машинном слове «свободно» помещается двузначное
число а. м. т. При соблюдении данного ограничения
максимальное число, которое может получиться в результате арифметических
операций однократной точности в одном машинном слове, не менее чем
2p2 - 1, т.е. 2p2 - 1 Ј max u Ј
2 · 22k - 1.
Дадим определение допустимых арифметических
операций однократной точности.
Определение. Арифметическую операцию с однократной точностью будем называть
допустимой, если исходные, промежуточные и окончательные
результаты не превышают 2 · 22k - 1.
Пусть даны два n-разрядных положительных
целых числа a и b по основанию p.
|
a = a1a2 ј an, a1
№ 0 и
b = b1b2 ј bn, b1
№ 0; | |
Ak = p · Ak-1 + ak,
A0 = 0 и
Bk = p · Bk-1 + bk,
B0 = 0; k = 1,2, ј,n. | | |
| |
(1) |
Рассмотрим операцию деления над числами неограниченной (произвольно
высокой) точности в а. м. т.
Определим число c как
|
c = a / b = = q0,
c1,c2јcn;
q0 = [a / b] = [An / Bn]; | |
где 0 Ј ak, bk,
ck < p; k = 1,2,ј,n. | | |
| |
При Ak > Bk
рассмотрим представление Ak через Bk в форме
Ak = qk · Bk + rk,
0 Ј rk < Bk,
1 Ј qk <
p; k = 1,2,ј,n. | |
(2) |
При Ak < Bk
рассмотрим представление Ak+1 через Bk в форме
|
Ak+1 = qk · Bk + rk,
0 Ј rk <
Bk, 1 Ј
qk < p; k і
2. | | |
| |
(2a) |
В представлении (2) rk и
rk-1 связаны между собой рекуррентным
соотношением
|
rk = prk-1 + ak - qkbk + p(qk-1 - qk)Bk-1, | |
где
qk Ј
qk-1,
k = 1,2,ј,n. | | |
| |
(3) |
При qk №
qk-1 (т.е. qk-1 = qk + 1, может быть кроме k = 2) будем иметь
rk = prk-1 + ak -
qkbk + pBk-1; k = 2,3,ј,n. | |
(3a) |
При qk = qk-1 = q (см. теорему 4) получим
rk = prk-1 + ak - qbk; k = 3,4,ј,n. | |
(3b) |
Tребуется при помощи допустимых
арифметических операций эффективно (быстро) определить значение q0.
В этих обозначениях справедлива следующая
лемма.
Лемма 1. q - 1 Ј q0 Ј q.
Доказательство. c = a / b = a1a2,a3јan / b1b2,b3јbn =
=
(A2 + x) / (B2 + y) = q + (r + x - qy) / (B2 + y), где
q = q2, r = r2 и
0 < x, y < 1.
| |
Очевидно, что |(r + x - qy) / (B2 + y)| < 1,
действительно, это следует из следующих цепочек неравенств:
|
0 Ј
r + x - qy Ј r + x Ј
B2 - 1 + x Ј
B2 + y, | |
0 і
r + x - qy і - qy і -q >
- B2 і -B2 - y. | | |
| |
Таким образом,
Следствие 1. Если q = 0,
то q0 = 0;
если q Ј r,
то q0 = q.
Согласно следствию, если r і q, то q0 = q, и поэтому предположим, что 0 Ј r < q. Обозначим через m то минимальное значение k, для
которого в (3b) имеет место одно из следующих неравенств:
тогда
справедлива следующая теорема.
Теорема 1(основная теорема). Если rm < 0,
то q0 = q - 1, или
если rm і q,
то q0 = q.
Доказательство. Пусть 0
Ј ri < q, i = 2,3,ј, m - 1, и для m имеет место условие
теоремы, т.е.
В результате поочередной подстановки значений
ri, i = 3,4,ј,m - 1, в
рекуррентное соотношение (3b) получим
0 Ј Am-2 - q · Bm-2 + am-1 - qbm-1 < q, т.е.
0 Ј Am-1 - q · Bm-1 <
q. | |
Рассмотрим случай, когда rm <
0; тогда
|
p(Am-1 - q · Bm-1) + am - qbm <
0, | |
Am - q · Bm Ј -1, (Am + 1) / Bm
Ј
q. | | |
| |
Из
последнего неравенства и леммы 1 следует, что q0 = q - 1.
Пусть теперь rm і q, тогда
|
p(Am-1 - q · Bm-1) + am - qbm і q, | |
Am - q(Bm + 1) і
0, Am / (Bm + 1) і
q. | | |
| |
из
последнего неравенства и леммы 1 следует, что q0 = q. Теорема
доказана.
Если не существует такое m, т.е. 0 Ј ri < q для всех i = 2,3,ј, n, то справедливо следующее следствие.
Следствие 2. a / b = q + rn / b,
0 Ј rn < q.
Теперь подробно рассмотрим случай
A2 < B2. Так как имеет место неравенство p2
Ј A3 Ј
p3 - p - 1, то
необходимо разработать алгоритм, который с помощью допустимых арифметических
операций позволяет эффективно определить значения неполного частного
q = q2 и остатка r = r2.
Элементарные преобразования приводят к
формуле
|
q2 = q1 - (q1b2 + r2 - (pr1 + a3)) / B2, | |
q2 = q1 -]q1b2 - (pr1 + a3)[/B2, | | |
| |
(4) |
|
DA = q1b2 - (pr1 + a3) через B2 в форме | |
DA = Dq + Dr / B2, 0 Ј Dr <
B2, -1 Ј Dq Ј p-1. | | |
| |
(5) |
Следует заметить, что
q1b2 Ј (2p - 2)(p - 1) < 2p2 - 1.
Тогда справедлива следующая теорема.
Теорема 2 (первая теорема о частном и об
остатке). При A2 < B2 значения
неполного частного и остатка в (2a) определяются формулами:
q = q1 - Dq и r = 0, при Dr = 0; или | |
(6) |
q = q1 - (Dq + 1) и r = B2 - Dr, при Dr № 0. | |
(7) |
Правильность формул (6) и (7) следует из (4)
и (5).
Аналог следствия 1 здесь звучит так:
если q2 = 1, то q0 = 1 и если q2 = p, то
q0 = p - 1.
Доказанная теорема занимает ключевое место
при разработке алгоритмов операции деления в а.м.т.
В а.м.т. в алгоритме
операции деления [1] после определения неполного частного q0 с
точностью единицы (q - 1 Ј
q0 Ј q) вычисляется разность
где
at(at) - текущее (предыдущее)
значение делимого, и при at < 0 производится компенсирующее
сложение в а.м.т.
Ниже следует лемма, согласно которой
компенсирующее сложение в алгоритме операций деления может отсутствовать.
Лемма 2 (о компенсирующем
сложении). Если неполное частное определено с
точностью единицы, то i-ый разряд частного c выражается формулой:
|
ci = q, если
at > 0 и
at і 0,
| |
ci = q - 1, если at > 0 и
at < 0, | |
ci = p + q, если
at < 0 и
at і 0,
| |
ci = p + q - 1, если at < 0 и
at < 0; i = 1, 2, ј,
n. | | |
| |
Доказательство. Первые два случая очевидны, докажем третий случай, откуда следует
и четвертый.
Пусть at = at - qb < 0, тогда определение
следующей цифры частного достигается при помощи представления
p at / b = q + r / b, 0 Ј r < b, -p <
q Ј -1, | |
так
как p(at + b) / b = p + pat / b = p + q + r / b, откуда и следует
утверждение леммы.
Замечание. Отметим, что здесь можно
обойтись без использования отрицательных неполных частных (q < 0 при a <
0), положив a = -a после операции a = a - qb.
Пусть, например, w
первоначально принимает значение, равное нулю (w = 0).
Далее w принимает значение, равное единице (w = 1), если результат операции a = a - qb окажется отрицательным (a < 0), то w сохраняет это значение до тех пор, пока a заново не станет
отрицательным, тогда w принимает значение, равное нулю
(w = 0) и т.д. Тогда
|
ci = q, если a
і 0 и w = 0, | |
ci = q - 1, если a < 0
и w =
0, | |
ci = p - q - 1,
если a і 0 и w = 1, | |
ci = p - q, если a < 0
и w = 1; i = 1, 2,
ј,
n. | | |
| |
Согласно основной теореме и первой теореме о
неполном частном и об остатке опишем алгоритм операции
деления в а.м.т.
Описание алгоритма операции деления. Работа алгоритма операции деления начинается с проверки на
нуль делимого a (a1 = 0 или a1 № 0)
и делителя b (b1 = 0 или b1 № 0).
Первоначально положим показатель результата e(c) = e(a) - e(b). В дальнейшем показатель делителя b e(b) = 0. При
A2 і B2 установить показатель
делимого e(a) = 0 и уточнить значение e(c) = e(c) + 1, а при A2 <
B2 установить показатель делимого e(a) = 1.
Алгоритм операции деления неотрицательных целых чисел а.м.т. состоит из следующих шагов.
Шаг 1. Пр. «Опр. e(c), e(a) = 0/1,
e(b) = 0»;
2.
i = 1;
3.
(q,r) = A2+e(a) / B2;
4. Если r і q, то идти к
17;
5. Пр. «Уточнение
значения
q»;
6. Если r і 0, то идти к
17;
7. q = q - 1;
8. m = k - (3 + e(a));
9. Пр.
«ci = q, ci+j = p - 1; j = 1,2,ј,m»;
10. Если m = 0, то
идти к
15;
11.
q = q + 1;
12. a = a - qb;
13.
e(a) = e(a) + m;
14. a = a + b; идти к
16;
15. a = a - qb;
16. e(a) = e(a) + 1;
идти к
3;
17.
ci = q;
18. a = a - qb;
19. Пр. «Опр.
e(a) и ci+j = 0, j = 1,2,јe(a)».
20. i = i + 1, если i
Ј n, то идти к
3.
21. End.
Помимо того, что описанный алгоритм исключает
компенсирующее сложение (при a - qb < 0) [1], он имеет
и другие преимущества. Перейдем к строгому изложению некоторых из них.
Теорема 3. Если для
некоторого i = 1,2,ј,n и некоторого k = m + 3 + e(a) і 3 в (3b) имеет место одно из следующих неравенств: rm < 0
либо rm і q, тогда:
Случай 1.
Если rk < 0, то ci = q - 1
и за
этой цифрой следует не менее m цифр ci+j = p - 1; j = 1,2,ј,m.
Случай 2.
Если rk і q, то ci = q
и за этой
цифрой следует не менее m цифр ci+j = 0; j = 1,2,ј,m.
Доказательство.
Случай 1. Пусть rk < 0, тогда 0 Ј
rk-1 < qk-1 = q и qk = q - 1;
|
c = a / b > Ak / (Bk + 1) = (qkBk + rk) / (Bk + 1) = qk + (rk - qk) / (Bk + 1) = | |
= qk + (prk-1 + ak - qkbk + pBk-1 - qk) / (Bk + 1)
і | |
і
qk + (pBk-1 - qk(bk + 1)) / (Bk + 1) = qk + 1 - (qk + 1)(bk + 1) / (Bk + 1)
і | |
і
qk + 1 - (qk + 1) / (Bk-1 + 1) = q - q / (Bk-1 + 1) і q - q / (pm+1+e(a) + 1) і | |
і
q - q/(pm+1 + 1); c
> (q - 1) + 1 - q / (pm+1+1), | | |
| |
откуда следует
утверждение теоремы по первой части.
При m = 0 из последнего неравенства следует,
что
c > (q - 1) + 1 - (p - 1) / (p + 1) = (q - 1) + 2 / (p + 1), | |
т.е.
ci = q - 1 и за ним следует цифра
ci+1 і 1.
Случай 2. Пусть теперь rk і 0, тогда
0 Ј rk-1 <
qk-1 = q и qk = q;
|
c = a / b <
(Ak + 1) / Bk = (qkBk + rk + 1) / Bk = qk + (rk + 1) / Bk = | |
= qk + (prk-1 + ak - qkbk + 1) / Bk
Ј qk + (prk-1 - qkbk + 1) / Bk
Ј | |
Ј
qk + (prk-1 + ak + 1) / Bk
Ј qk + pqk-1 / Bk Ј qk + qk-1 / Bk = | |
= q + q / Bk Ј q + q / pm+1+e(a) Ј q + q / pm+1 Ј q + (p - 1)/pm+1; | |
| |
| |
откуда следует
утверждение теоремы по второй части.
При m = 0 из последнего неравенства следует,
что
т.е.
ci = q и за ним следует цифра ci+1 Ј p - 2.
Теорема полностью доказана.
Теорема 4 (вторая теорема о частном и об
остатке). Если для некоторого k і
3 (в (3b)) имеет место неравенство 0 Ј rk
< qk, то 0 Ј rk-1 < qk-1 и
qk-1 = qk.
Доказательство. Прежде
всего докажем, что qk-1 = qk = q.
Если qk-1 №
qk, то из (3a) следует, что
|
ak = qkbk + rk - p(rk-1 + Bk-1) Ј
qkbk + qk - p(rk-1 + Bk-1) Ј
| |
Ј
qk(bk + 1) - p(rk-1 + Bk-1) Ј
p(qk - rk-1 - Bk-1) Ј
0, т.е. ak < 0,
| | |
| |
что
противоречит определению ak.
Предположим, что утверждение теоремы неверно
и rk-1 < 0, тогда
|
ak = qkbk + rk - prk-1, так как
| |
qbk + rk
і 0, то
ak і -prk-1 і
p, | | |
| |
что
противоречит определению ak.
Пусть теперь rk-1 і q, тогда
|
ak = qkbk + rk - prk-1 = -(p(rk-1 - q) + (p - bk)q - rk), так как | |
p(rk-1 - q)
і 0 и
(p - bk)q - rk і 0, то
ak <
0, | | |
| |
что
противоречит определению ak. Теорема доказана.
Ереванский научно-исследовательский
институт математических машин
Литература
1. Кнут Д. Искусство программирования для ЭВМ. Получисленные
алгоритмы. М.: Мир, 1977.
2. Schonhage A., Strassen V. Computing, Archiv für elektronisches Rechnen, 7 (1971), Fasc.
3-4.
3. Амбарян С. Л. Эффективные алгоритмы выполнения арифметических операций в арифметике с
многократной точностью. Пакет программ а.м.т. (ПП-АМТ) в
среде Visual C++. Ереванский научно-исследовательский институт математических
машин (ЕрНИИММ), Ереван, 1998.