Нахождение точного целочисленного корня квадратного

УДК 512.1 - 3

А.Н. Колесов

Нахождение точного целочисленного корня квадратного

На основе представлений о структуре квадрата натурального числа [2] предложено детальное описание нового метода точного вычисления корня квадратного и остатка из натурального числа (по сути, алгоритма), дающего существенное ускорение процесса решения задачи в случае больших чисел. Даны рекомендации по нахождению приближенного значения корня с гарантированно приемлемой точностью. Примерно охарактеризованы задачи дальнейшего рассмотрения проблем вычислений.

Ключевые слова: целое число, структура квадрата целого числа, точный корень квадратный из натурального числа, приближение квадратного корня с гарантированной относительной погрешностью.

1. Исходные соображения и предпосылки

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

Работа посвящена нахождению точного значения целочисленного корня (основания Од) и остатка Да от извлечения корня квадратного (ниже - корня) из произвольного натурального числа А (далее - числа А) с привлечением свежих данных и представлений.

Задача вычисления корня заслуживает внимания, поскольку часто встречается в научно-технических расчётах. Попутно в работе выявляется возможность повышения точности определения вещественных корней квадратных. Излагаемый материал базируется, кроме прочего, на представлениях о структуре квадрата числа и её свойствах, представленных и обоснованных в работах [1, 2].

В [2] приведена структура квадрата N -значного числа В, усмотренная в соотношении для квадрата числа, представленного цифрами Ь .

В2 =

XЬ • Ю-1 = х

\.г=1 у г=1 г,;'=1

Ниже, для справок, приводятся табл. 1 и 2, показывающие структуру квадрата («хвостовую» и головную части структуры), увиденную в (1).

Таблица 1

Структура квадрата натурального числа

Разряды основания 5 4 3 2 1

Цифры основания Ь5 Ь4 Ьз Ь2 Ь1

Номера пар разрядов г.2 квадратов Ь 5 4 3 2 1

Разряды цифр в квадрате В и инд. стр. 10 9 8 7 6 5 4 3 2 1

Квадраты цифр основания («общая» строка) Ь5 ь2 Ь4 2 Ьз ь2 Ь2 Ь2 Инд. стр. №1

Инд. стр. №2 2 • Ь2*

Инд. стр. №3 2 • Ьз*

Инд. стр. №4 2 • Ь4*

Инд. стр. №5 2 • Ь *

и т.д. «Головная» часть - в табл. 2 |

Далее излагаются и обосновываются действия по быстрому определению корня. Дано описание алгоритма нахождения корня, достаточное для написания программы вычислений на ЭВМ с использованием модуля, выполняющего первые четыре действия арифметики и сравнение величин при обработке произвольных чисел. Алгоритм даёт пошаговое формирование искомого основания в виде повторяющихся этапов с однотипными вычислениями. Напомним, нумерация разрядов - от младшего с номером «1».

Таблица 2

Головная часть структуры: состав трёх старших пар разрядов и двух последних индивидуальных строк структуры из табл. 1

Абсолютные разряды

Последние пары разрядов с квадратами цифр bN ь2 ь2 ^N-2)

Предпоследняя индивидуальная строка Пусто 2 •1о • ^-1 • ^N-2) Часть стр.

Структура последней индивидуальной строки 2 •1о • ^ • ь( N-1) Часть посл. индивидуальной строки

Максимальная добавка в старшей паре разрядов 2 • ^ Содержимое части предшествующих разрядов полного квадрата числа

2. Описание и обоснование алгоритма решения задачи

Структура квадрата двучлена

обладает всеми свойствами структуры квадрата (что отмечено в [2]). Аналогично структуре, представленной табл. 1 и 2 в данном случае имеем дело с тремя сдвинутыми относи-

2 2

тельно друг друга строками (представляющими три числа: е ; (2 • е • d) и d ). Число разрядов, на которое сдвинуты числа относительно друг друга, легко устанавливается подобно тому, как это выполняется для строк структуры квадрата числа, где основание представлено суммой цифр со степенями основания системы счисления.

Процесс решения носит «поэтапно рекуррентный» характер. Внутри этапа приближение к истинному значению корня осуществляется «снизу». Попутно возможно получение приближения «сверху». Число этапов определяется разрядностями исходного числа А и точного нулевого приближения корня ^ из отрезка головной части А. Подробно излагается и обосновывается один (первый) этап, состоящий из десятка шагов.

Пусть имеем исходное число А из NA цифр Ь (Ь = 1,2,..., NA) .

Этап первый

2.1. Определяем число пар разрядов N у А, дописывая перед цифрой старшего разряда нуль при нечётном числе цифр NA в исходном А, согласно пункту 2.4 в [2].

Согласно [2] N есть число разрядов у искомого основания аи.

2.2. Отделяем чётное число (2• По) старших разрядов (с учётом возможного нуля в старшем разряде, см. предыдущий пункт), т.е. По пар разрядов, представляющих число Апо. При этом ориентируемся на возможности точного определения целочисленной части корня ^ из выделенного головного участка Апо числа А из п. 2.1 обычными доступными средствами серийных компьютеров и их математического обеспечения. Получаем По точных головных цифр основания (по п. 2.12 из [2]).

2.3. Находим ^ , ориентируясь на п. 2.2:

^ =[4аЛо ] .

В приведённом виде величины п. 2.1...2.3 находятся только на этапе 1, на последующих этапах эти величины находятся в предшествующем этапе.

2.4. Дописываем справа у ^ нули в количестве, дополняющем ^ до числа, совпадающего по числу разрядов с числом разрядов у искомого основания аи, т.е. до N . Получаем нулевое приближение для основания на первом этапе аио1 = Ьо с N - По) нулями справа. Эти нули дают нулевое приближение «хвостовой» части «снизу» - со стороны младших разрядов формируемого основания. Условимся ниже последней цифрой индекса обозначать номер этапа.

2.5. Находим нулевое приближение квадрата аио1 к исходному числу А (снизу):

2

А«о1 = а«о1 .

2.6. Находим первоначальную (нулевую) разность ДАщ = A - A~o1 , согласно (2) эквивалентную выражению 2 • c • d + d . В данном случае c = ^и d - исходное в (2). В следующих этапах c возрастает, а d уменьшается.

2.7. Находим AA*, отделяя у величины ДАщ справа заведомо «десятичную часть»

из (N - По) цифр (разрядность d), перед которыми в сумму в правой части (2) (без c ) войдут только цифры переполнения за счет поразрядного суммирования строк (с учётом их сдвига) и все цифры произведения 2 • c • d .

2.8. Делим целочисленную часть ААщ (т.е. AAQu), полученную в п. 2.7, на удвоенную величину ko (т.е. делим на 2 • c = 2 • ko , см. п. 2.6). При этом находим первое приближение «хвостовой» части основания а~Х1 «сверху» в виде целой части частного (самое первое приближение - нулевое, все цифры - нули).

2.9. Приближение основания «сверху» - а^в1 - получается следующим образом. Число разрядов основания N известно (из п. 2.1). Младшие разряды первого приближения «хвостовой» части формируемого основания заполняются цифрами из п. 2.8 (из a~xi) в

порядке их следования, «прижимаясь» к правой низкоразрядной границе находимого основания. К левой границе высоких разрядов основания «прижимаются» точные цифры головной части искомого основания ko , найденные в п. 2.3 (на основании сведений из

[2]). Не заполненные значащими цифрами «внутренние» разряды формируемого основания (если такие окажутся) заполняем нулями (по логике проведённых операций и свойствам структуры квадрата других цифр там не может быть).

2.10. Для определения точного числа верных «головных» цифр в найденном первом приближении основания а^в1 («сверху»), завершающем первый этап приближения, рассмотрим структуру числа A и отметим существенное для нас.

2.10.1. Число A = aи +Aa, где аи - искомое основание целочисленного квадрата в А, а Aa - целочисленный остаток от извлечения целочисленного корня из А, в квадрат a^ не входит. Величина приращения Aa < 2 • a^ . Поэтому цифры приращения не выйдут за пределы (N +1) го разряда (т.е. целочисленный остаток непосредственно, без учёта переносов за счёт переполнения в разрядах, может повлиять лишь на величину самой младшей цифры целочисленного приближённого основания).

2.10.2. Квадрат основания, эквивалентного d в (2), не может дать цифру за пределами (2 • N - 2 • По) разрядов, отсчитываемых с младшего разряда.

2.10.3. Сложение двух строк, состоящих даже из одних цифр, девять, не может привнести в (2 • N - 2 • По +1) -й разряд более единицы.

По этой причине при делении АЛщ из п. 2.8 на 2 • ko (ko - из п. 3) получим (no -1) точную цифру старших разрядов, следующих за По старшими цифрами в искомом основании, определёнными в п. 3 (с учётом вставленных нулей, если потребуется -см. п. 2.9).

В итоге первого этапа приближения (состоящего из двух шагов - «снизу» и «сверху») будет найдено (2 • По -1) точных (головных) цифр, являющихся цифрами первого

приближения основания «снизу» - % (как и в п. 2.4, 2.5, разряды, дополняющие %

(«новое c ») до N -разрядного числа, заполняются нулями). Число (2• По -1) определяет

новое начальное значение п. для следующего этапа [номера стартовых величин (k , n ,

A^) для очередного этапа «отстают» на единицу от номера осуществляемого этапа].

На первом этапе имеем две операции, которые можно отнести к трудоёмким и времяёмким (п. 2.5 - умножения и п. 2.8 - деления). Приведенное число таких операций будет сохраняться и в каждом из последующих этапов.

Этап второй

На втором этапе приближения, имея в распоряжении % и n точных головных цифр, поступаем тем же путём с величинами An1 и т.д., что и с Ano и т.д. при операциях с ko (проделываем операции, аналогичные описанным в п. 2.4 ... 2.10 при новых

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

является очередным приближением для п = П2, полученным после выполнения второго

этапа (стартовое значение для третьего этапа).

При необходимости описанные этапы приближения можно повторять многократно, реализуя рекуррентный процесс точного определения корня. Текущее значение п в этом случае нарастает, приближаясь по скорости роста к скорости роста члена геометрической прогрессии со знаменателем q = 2 !

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

щ =

Пределом в описанном процессе приближения корня будет ситуация, когда величина п превысит N/2 (при чётном N) или [^ +1)/2] при нечётном N . В этом случае на новом этапе очередное п превысит N и в число верно определённых цифр формируемого основания нужно взять только (N -п) цифр, где п предшествует очередному значению, превышающему N .

Общее число шагов вычисления корня будет определяться номером последнего этапа и числом пунктов в каждом этапе (их произведением).

Для иллюстрации эффективности оценим «трудоёмкость в этапах» при извлечении корня из 1000-разрядного (экзотический пример) и 120-разрядного чисел.

При доступном исходном корне ^ из 16 знаков корень из 1000-разрядного числа,

меньшего или равного 1,921х101000, будет найден уже на шестом этапе. При этом потребуется выполнение, наряду с относительно простыми операциями, не более 12 наиболее трудоёмких и времяёмких операций, включающих не более шести умножений и шести делений в пределах до 1000-разрядных чисел (см. абзац, непосредственно предшествующий описанию второго этапа). При 120-разрядном числе в аналогичных условиях потребуется два этапа для получения результата.

Эти примеры впечатляют, но практическую ценность такая ситуация может и не иметь (смотря по целям обсчитываемых задач).

Более впечатляющей может оказаться ситуация, когда в распоряжении выполняющего вычисления имеются, например, восьмиразрядное вычислительное устройство, позволяющее точно определить четыре старших цифры целочисленного корня, и упоминавшийся в последнем абзаце разд. 1 модуль выполнения простых арифметических операций и сравнения величин чисел, представляемых массивами цифр. При максимальной длине массивов в 50 членов, обрабатываемых в арифметическом модуле, следование рассмотренному в статье алгоритму позволит найти точное значение 25-разрядного целочисленного корня из 50-разрядного числа за три этапа, как это следует из оценки по соотношению (4) при П0 =4 !

При уменьшении числа выполняемых этапов вычислений (против вычислений, требующихся для точного определения корня) можно на порядки повысить точность вычисления вещественного корня. Оценка точности вычисления 5 будет определяться отношением десяти в степени, равной разности числа разрядов N у а^ и числа точно

вычисленных разрядов на момент окончания вычислений по промежуточному этапу, к десяти в степени N (из п. 2.1).

Естественно, что при выполнении делений процесс деления можно прекращать по достижении разряда, за которым следует десятичная часть очередного находимого числа (см. п. 2.7).

Заключительное умножение при вычислении точного целочисленного корня приходится на этап проверки правильности конечных результатов. Результат будет верен, если разность исходного числа А и квадрата последнего сформированного на г -м этапе основания ахв1 (со всеми верными, согласно процедуре нахождения, цифрами) будет не более

2 • ахЫ, т.е.

а«вг2 - А < 2 • аивг.

Выражение (5) следует из того факта, что разность соседних квадратов равна удвоенному меньшему основанию плюс единица.

3. О трудоёмкости извлечения корня предлагаемым способом

В оценке трудоёмкости вычисления корня будем предполагать равенство трудоёмко-стей выполнения простых операций умножения двух цифр, сравнения двух цифр и их сложения (с учётом возможного переноса переполнения в соседний старший разряд). Ими будем измерять трудоёмкость.

Оценим минимально необходимое число этапов для извлечения корня.

На основе (4) на Ь -м этапе число верно определяемых головных цифр

щ = 2Ь .

N -разрядное основание из А найдётся при выполнении условия

N < пЬ < 2 • N .

Из (6) и (7) достижение минимально приемлемого Ь -го этапа (обозначим его через ги - искомое Ь) получится при

Ьи = Ь = 1п

Далее оценим число умножений цифр при щ = По,П1,...щ...П^ . Для каждого из щг чис-

2

ло умножений цифр равно Пь . Поскольку соседние пг -е величины практически удваиваются при возрастании Ь, то последовательность Пь (Ь = 1,2,...,Ь^) практически представляет геометрическую прогрессию со знаменателем q = 4, сумма которой

^произв = Щ • (Я^1 -1)/(?-1). Поскольку процессу поцифрового умножения сопутствуют сложения, сравнения и переносы переполнения (см. первый абзац разд. 3), то полученную оценку числа поцифровых умножений утраиваем. В итоге получим [с учётом (8)] заведомо завышенную оценку трудоёмкости умножения:

«произв.результир = 3 • Щ2 •

Операции деления примерно равнозначны по трудоёмкости умножению. Только в нашем случае имеет место постепенное уменьшение максимально возможной разрядности текущего исходного делимого (N - Пь) (целая часть ААоь) при одновременном возрастании разрядности делителя (2 • ki). Деление на каждом этапе заканчивается, когда разрядность

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

Таким образом, приблизительная оценка трудоёмкости равна

* 2 • ^произв. результир. = 6 • п0 •

и растёт с ростом числа этапов Ь [из (8)].

Учёт вклада остальных операций каждого этапа в оценку трудоёмкости будет невелик. Уточнение оценок требует дополнительного рассмотрения.

Для приведённого выше примера извлечения корня из 120-разрядного числа (число разрядов основания N = 60) при По = 16 по соотношению (8) получим суммарное число операций по принятому соглашению:

* 6 • 162 • (4М(60-1)/(16-1))/1п2 -1)/(4 -1)* 7680.

Для 1000-разрядного числа, равного 101000 (число разрядов основания N = 500), для приведённого выше примера потребуется уже

* 6 • 162 • (41п((500-1)/(16-1))/1п2 -1)/(4 -1) * 5 1 2(45,056 -1)* 566 1 00

операций.

То есть при возрастании разрядности на порядок число этапов вычислений возросло втрое, а число условных операций - примерно в 74 раза.

4. Пример вычисления точной целочисленной части корня

Возьмём произвольно испытуемое 32-разрядное число

А = Аи=98 765 432 109 876 543 210 987 654 321 079 - заведомо не целочисленный квадрат, так как по структуре квадрата Ь>2 (см. табл. 1) должно быть чётным при цифрах окончания 1, 4, 5 и 9.

Этап 1. По п. 2.1. NA = 32; N = 16.

По п. 2.2. Исходим из наличия восьмиразрядного калькулятора, позволяющего точно определить целую часть корня из числа. Число точно определяемых старших цифр П0=4, число для извлечения корня ¿0 - Ап0=98 765 432.

По п. 2.3 находим ¿0=9938. Далее по пунктам 2.4 ... 2.8 находим:

а«01 = к *1012; Ак01 = ая012 =98 763 844 000 000 000 000 000 000 000 000; ДА01 = А - А»01=1 588 109 876 543 210 | 987 654 321 079. Отделяем N -П0) =16-4=12 знаков справа (отделено жирной вертикальной чертой у

найденного ДАщ), находим ДА*1=1 588 109 876 543 210 ; далее, по п. 2.8, находим первое

приближение «хвостовой» части на первом этапе «сверху» (нулевое приближение - нули - см. п. 2.4):

аях1 =ДА*1/(2 • Ао)=1 588 109 876 543 210/(2*9938)=79 900 879 278,688. По п. 2.9. а^в1=9 938 079 900 879 278 (жирным шрифтом выделен нуль, вставленный в незаполненную срединную часть формируемого N -разрядного основания).

По п. 2.10 гарантированное число точных цифр головных разрядов находимого основания равно семи (новое п = П1 =7), к =9 938 079).

Повторяя действия первого этапа по п. 2.2...2.10 с полученными величинами, получим следующую цепочку значений (в этапе 2).

Этап 2. Ап1 =98 765 432 109 876 (п1=7), к1 =9938079,

А*02= ¿1 =98 765 414 210 241*1018;

ДАо2= А - А»02 =17 8 9 9 6 3 5 543 210 9 8 7 | 654321079; N - п1)=9; ДА*2 =17 899 635 543 210 987;

аях2 =ДА*2/(2 • ¿1)=900 558 123,11..; а^в2 =9 938 079 900 558 123 (под сомнением теперь только три последние цифры - 1 2 3). Итог второго этапа: п2 =13; к> =9 938 079 900 558.

Этап 3. На старте третьего этапа имеем: щ =13; N - п2) =3; к2 =9 938 079 900 558; ДА*3 = Акв3 - А =1636 042 276 290 321 | 079;

аих3 =ДА*3/(2 • ¿2)= 082,311. (первым стоит 0, поскольку должно быть три целых цифры (^ - П2) =3) в дополнение до N =16 [это диктуют пункты 2.7 ... 2.9)].

Следовательно, а^в3 =9 938 079 558 082= а^ . Определено 16 необходимых цифр, значит, полученное число должно удовлетворять неравенству (5) (если не были допущены ошибки при вычислениях).

Итак, Од =9 938 079 900 558 082; остаток Да =6 197 172 598 802 355< а^ , что соответствует неравенству (5).

Решение верно! Возможна проверка по п. 2.10.

Если не выполнять третьего этапа, то относительная ошибка 5 будет равна (см. четвёртый абзац с конца разд. 2) 5 =103/1016=10-13. 5. Заключение

При работе в плане намеченных в [2] путей получено следующее.

5.1. На основе [2] и в предположении возможности определения точного целочисленного корня квадратного ¿0 из головной части натурального числа А , найден алгоритм

нахождения точного значения целочисленной части корня из числа А и приведено его обоснование.

5.2. Показано, что при наличии модуля выполнения арифметических действий с числами и сравнения этих чисел, представленных массивами цифр, можно, в зависимости от разрядностей первого приближения корня ¿0 из исходного числа А, за единицы или

единицы десятков этапов операций над числами, вплоть до 1000 разрядных, найти точный целочисленный корень. Трудоёмкие и время ёмкие операции умножения и деления больших чисел составляют менее четверти числа «шагов» в этапах (разд. 2).

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

5.4. Указан путь минимизации сложности состава вычислительной аппаратуры при узкоспециализированных вычислениях (например, в аппаратуре автоматики).

5.5. Выполненная работа подсказывает перспективные пути рассмотрения структур вычислительных операций с позиций задач, упомянутых в разд. 1, в частности и последующего сокращения работы при вычислении точного корня с оценкой трудоёмкости и временных затрат.

Литература

1. Афанасьева М.С. Структура квадрата натурального числа. Свойства. Следствия / М.С. Афанасьева, А.Н. Колесов // Научная сессия ТУСУР - 2008: матер. докла. Всерос. науч.-техн. конфер. студентов, аспирантов и молодых ученых, Томск, 5-8 мая 2008 г.: В 5 ч. - Ч. 3. - Томск: В-Спектр, 2008. - С. 85-89.

2. Афанасьева М.С. Обоснование структуры квадрата целого числа. Следствия, вытекающие из рассмотрения структуры, практические рекомендации / М.С. Афанасьева, А.Н. Колесов // Доклады ТУСУРа. - 2009. - № 1 (19), ч. 1. - С. 207-213.

Колесов Альберт Николаевич,

Канд. техн. наук, доцент каф. средств радиосвязи ТУСУРа Тел.: (382-2) 41-37-09, 42-78-59 Эл. почта: mrc@main.tusur.ru

A.N. Kolesov

Calculation of correct value of an integer number square root

Basing on the structure of a natural number square root, the author gives the detailed description (algorithm) of a method providing the correct calculation of a natural number square root and a residue. The method allows to fasten the process in case of big numbers. There are recommendations how to get the better accuracy of calculations. The direction of the future research is also characterized.

Keywords: integer number, structure of an integer number square root. Correct square root of natural number. Approximation of square root with guaranteed relative error.