Методы вычисления квадратных корней

Методы вычисления квадратных корней - это алгоритмы аппроксимации неотрицательного квадратного корня. положительного действительного числа . Поскольку все квадратные корни из натуральных чисел , кроме полных квадратов , иррациональны , [1] Квадратные корни обычно можно вычислить только с некоторой конечной точностью: эти методы обычно создают серию все более точных приближений .

Большинство методов вычисления квадратного корня являются итеративными: после выбора подходящей начальной оценки , итеративное уточнение выполняется до тех пор, пока не будет выполнен некоторый критерий завершения. Одной из схем уточнения является метод Герона , частный случай метода Ньютона . Если деление обходится гораздо дороже, чем умножение, вместо этого может быть предпочтительнее вычислить обратный квадратный корень .

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

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

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

История [ править ]

Процедуры поиска квадратных корней (особенно квадратного корня из 2 ) известны, по крайней мере, со времен древнего Вавилона в 17 веке до нашей эры. Вавилонские математики вычислили квадратный корень из 2–3 шестидесятеричных «цифр» после 1, но неизвестно, как именно. Они знали, как определить гипотенузу, используя

(приведя для примера для диагонали ворот, высота которой равна стержни и ширина которых стержни), и они, возможно, использовали аналогичный подход для нахождения аппроксимации [2]

Метод Герона из Египта первого века был первым установленным алгоритмом вычисления квадратного корня. [3]

Современные аналитические методы начали развиваться после введения арабской системы счисления в Западную Европу в эпоху раннего Возрождения. [ нужна ссылка ]

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

оценка Первоначальная

Многие итеративные алгоритмы квадратного корня требуют начального начального значения . Начальное число должно быть ненулевым положительным числом; оно должно быть между 1 и , число, квадратный корень которого требуется, поскольку квадратный корень должен находиться в этом диапазоне. Если начальное число находится далеко от корня, алгоритму потребуется больше итераций. Если кто-то инициализируется с (или ), то примерно итерации будут потрачены впустую, просто чтобы получить порядок величины корня. Поэтому полезно иметь приблизительную оценку, которая может иметь ограниченную точность, но ее легко вычислить. В общем, чем лучше первоначальная оценка, тем быстрее сходимость. Для метода Ньютона (также называемого вавилонским методом или методом Герона) семя, несколько большее, чем корень, сходится немного быстрее, чем семя, несколько меньшее, чем корень.

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

Десятичные оценки [ править ]

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

оценки Скалярные

Скалярные методы делят диапазон на интервалы, и оценка в каждом интервале представлена ​​одним скалярным числом. Если диапазон рассматривать как один интервал, среднее арифметическое (5,5) или среднее геометрическое ( ) раз являются правдоподобными оценками. Абсолютная и относительная погрешность для них будут различаться. В общем, один скаляр будет очень неточным. Лучшие оценки делят диапазон на два или более интервала, но скалярные оценки по своей сути имеют низкую точность.

Для двух интервалов, разделенных геометрически, квадратный корень можно оценить как [Примечание 1]

Эта оценка имеет максимальную абсолютную ошибку при a = 100 и максимальная относительная ошибка 100% при a = 1.

Например, для факторизованный как , оценка . , абсолютная ошибка 246 и относительная ошибка почти 70%.

оценки Линейные

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

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

это лучшая оценка В среднем , которую можно получить с помощью единичной линейной аппроксимации функции y=x. 2 в интервале . Он имеет максимальную абсолютную ошибку 1,2 при a=100 и максимальную относительную ошибку 30% при S=1 и 10. [Примечание 2]

Чтобы разделить на 10, вычтите единицу из показателя степени. , или образно переместите десятичную запятую на одну цифру влево. Для этой формулировки любая аддитивная константа 1 плюс небольшое приращение даст удовлетворительную оценку, поэтому запоминание точного числа не является обузой. Аппроксимация (округленная или нет) с использованием одной линии, охватывающей диапазон. точность меньше одной значащей цифры; относительная ошибка больше 1/2 2 , поэтому предоставляется менее 2 бит информации. Точность сильно ограничена, поскольку диапазон составляет два порядка, что довольно велико для такого рода оценок.

Гораздо лучшую оценку можно получить с помощью кусочно-линейной аппроксимации: нескольких отрезков прямой, каждый из которых аппроксимирует некоторую поддугу оригинала. Чем больше сегментов линий используется, тем лучше аппроксимация. Самый распространенный способ — использовать касательные линии; Важнейшим выбором является то, как разделить дугу и где разместить точки касания. Эффективный способ разделить дугу от y = 1 до y = 100 — геометрический: для двух интервалов границы интервалов представляют собой квадратный корень из границ исходного интервала, 1 × 100, т. е. [1, 2 100 ] и [ 2 100,100 ]. Для трех интервалов границами являются кубические корни из 100: [1, 3 100 ], [ 3 100 ,( 3 100 ) 2 ], и [( 3 100 ) 2 ,100] и т. д. Для двух интервалов 2 100 = 10, очень удобное число. Касательные линии легко вывести, они расположены в точках x = 1* 10 и x = 10* 10 . Их уравнения: и . При инвертировании квадратные корни равны: и . Таким образом, для :

Максимальные абсолютные ошибки наблюдаются в верхних точках интервалов при а =10 и 100 и составляют 0,54 и 1,7 соответственно. Максимальные относительные ошибки приходятся на концы интервалов, при а =1, 10 и 100, и составляют в обоих случаях 17%. 17% или 0,17 больше, чем 1/10, поэтому метод дает точность менее десятичной цифры.

оценки Гиперболические

В некоторых случаях гиперболические оценки могут быть эффективными, поскольку гипербола также является выпуклой кривой и может лежать вдоль дуги Y = x. 2 лучше, чем линия. Гиперболические оценки более сложны в вычислительном отношении, поскольку они обязательно требуют плавающего деления. Почти оптимальное гиперболическое приближение к x 2 на интервале составляет у=190/(10-х)-20. При транспонировании квадратный корень равен x = -190/(y+20)+10. Таким образом, для :

Плавающее деление должно иметь точность только до одной десятичной цифры, потому что общая оценка является настолько точной и может быть сделана в уме. Гиперболическая оценка в среднем лучше, чем скалярная или линейная оценка. Максимальная абсолютная ошибка составляет 1,58 при 100 и максимальная относительная ошибка 16,0% при 10. Для худшего случая при a = 10 оценка составляет 3,67. Если начать с 10 и сразу применить итерации Ньютона-Рафсона, потребуются две итерации, что даст 3,66, прежде чем точность гиперболической оценки будет превышена. Для более типичного случая, такого как 75, гиперболическая оценка равна 8,00, и для получения более точного результата потребуется 5 итераций Ньютона-Рафсона, начиная с 75.

оценки Арифметические

Метод, аналогичный кусочно-линейной аппроксимации, но использующий только арифметику вместо алгебраических уравнений, использует таблицу умножения наоборот: квадратный корень числа от 1 до 100 находится между 1 и 10, поэтому, если мы знаем, что 25 - это идеальный квадрат (5 × 5), а 36 — полный квадрат (6 × 6), то квадратный корень из числа, большего или равного 25, но меньше 36, начинается с цифры 5. Аналогично для чисел между другими квадратами. Этот метод даст правильную первую цифру, но он не имеет точности до одной цифры: например, первая цифра квадратного корня из 35 равна 5, но квадратный корень из 35 равен почти 6.

Лучший способ — разделить диапазон на интервалы посередине между квадратами. Итак, любое число между 25 и половиной пути к 36, что равно 30,5, оценивается как 5; любое число от 30,5 до 36, оценка 6. [Примечание 3] Процедура требует лишь небольшой арифметики, чтобы найти граничное число в середине двух произведений таблицы умножения. Вот справочная таблица этих границ:

а ближайшая площадь Восток.
от 1 до 2,5 1 (= 1 2 ) 1
от 2,5 до 6,5 4 (= 2 2 ) 2
от 6,5 до 12,5 9 (= 3 2 ) 3
от 12,5 до 20,5 16 (= 4 2 ) 4
от 20,5 до 30,5 25 (= 5 2 ) 5
от 30,5 до 42,5 36 (= 6 2 ) 6
от 42,5 до 56,5 49 (= 7 2 ) 7
от 56,5 до 72,5 64 (= 8 2 ) 8
от 72,5 до 90,5 81 (= 9 2 ) 9
от 90,5 до 100 100 (= 10 2 ) 10

Последняя операция — умножить оценку k на степень десяти, разделенную на 2, так что для ,

Этот метод неявно дает одну значащую цифру точности, поскольку он округляется до лучшей первой цифры.

В большинстве случаев метод можно расширить на 3 значащие цифры путем интерполяции между ближайшими квадратами, ограничивающими операнд. Если , затем примерно k плюс дробь, разница между a и k 2 делится на разницу между двумя квадратами:

где

Последняя операция, как указано выше, заключается в умножении результата на степень десяти, разделенную на 2;

k — десятичная цифра, а R — дробь, которую необходимо преобразовать в десятичную. Обычно он имеет только одну цифру в числителе и одну или две цифры в знаменателе, поэтому преобразование в десятичную дробь можно выполнить мысленно.

Пример: найти квадратный корень из 75. 75 = 75 × 10. · 0 , поэтому a равно 75, а n равно 0. Из таблицы умножения квадратный корень из мантиссы должен быть равен 8 точкам , потому что 8 × 8 — это 64, а 9 × 9 — это 81, это слишком много, поэтому k равно 8; что-то это десятичное представление R. — Дробь R равна 75 - k 2 = 11, числитель, и 81 - k 2 = 17, знаменатель. 11/17 — это немного меньше, чем 12/18, что составляет 2/3 секунды или 0,67, поэтому угадайте 0,66 (здесь можно угадать, ошибка очень маленькая). Таким образом, оценка равна 8 + 0,66 = 8,66 . 75 до трех значащих цифр равно 8,66, поэтому оценка верна до трех значащих цифр. Не все такие оценки с использованием этого метода будут столь точными, но они будут близки.

оценки Бинарные

При работе в двоичной системе счисления (как это делают компьютеры внутри себя), выражая как где , квадратный корень можно оценить как

что представляет собой линию регрессии метода наименьших квадратов к коэффициентам из трех значащих цифр. имеет максимальную абсолютную ошибку 0,0408 при =2, и максимальная относительная ошибка 3,0% при =1. Удобная в вычислительном отношении округленная оценка (поскольку коэффициенты представляют собой степени 2):

[Примечание 4]

который имеет максимальную абсолютную ошибку 0,086 при 2 и максимальную относительную ошибку 6,1% при a = 0,5 и a = 2,0 .

Для , бинарное приближение дает . , поэтому оценка имеет абсолютную ошибку 19 и относительную ошибку 5,3%. Относительная погрешность чуть меньше 1/2. 4 , поэтому оценка хороша для 4+ бит.

Оценка для хорошие до 8 бит можно получить путем поиска в таблице по старшим 8 битам , помня, что старший бит неявно присутствует в большинстве представлений с плавающей запятой, а нижний бит числа 8 должен быть округлен. Таблица представляет собой 256 байт предварительно вычисленных 8-битных значений квадратных корней. Например, для индекса 11101101 2, представляющего 1,8515625 10 , запись имеет вид 10101110 2, представляющего 1,359375 10 , квадратный корень из 1,8515625 10 с точностью до 8 бит (2+ десятичные цифры).

Метод Герона [ править ]

Первый явный алгоритм аппроксимации известен как метод Герона , в честь греческого математика первого века Героя Александрийского , который описал этот метод в своей 60 года нашей эры работе «Метрика» . [3] Этот метод еще называют вавилонским методом (не путать с вавилонским методом приближения гипотенуз ), хотя нет никаких свидетельств того, что этот метод был известен вавилонянам.

Учитывая положительное действительное число , пусть x 0 > 0 — любая положительная начальная оценка . Метод Герона заключается в итеративном вычислении

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

Это эквивалентно использованию метода Ньютона для решения . Этот алгоритм является квадратично сходящимся : количество правильных цифр числа примерно удваивается с каждой итерацией.

Вывод [ править ]

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

Точнее, если это наше первоначальное предположение и – ошибка в нашей оценке такая, что тогда мы можем разложить бином как:

и найдите член ошибки

если мы предположим, что

Следовательно, мы можем компенсировать ошибку и обновить нашу старую оценку как

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

Этот алгоритм одинаково хорошо работает с p -адическими числами , но его нельзя использовать для идентификации действительных квадратных корней с p -адическими квадратными корнями; с помощью этого метода можно, например, построить последовательность рациональных чисел, которая сходится к +3 в действительных числах и к -3 в 2-адических числах.

Пример [ править ]

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

Поэтому до трех десятичных знаков.

Конвергенция [ править ]

Полулогарифмические графики, сравнивающие скорость сходимости метода Герона для нахождения квадратного корня из 100 для различных начальных предположений. Отрицательные предположения сходятся к отрицательному корню, положительные — к положительному корню. Обратите внимание, что значения ближе к корню сходятся быстрее, и все приближения являются завышенными. В файле SVG наведите указатель мыши на график, чтобы отобразить его точки.

Предположим, что Тогда для любого натурального числа Пусть погрешность относительная определяться

и таким образом

Тогда можно показать, что

И таким образом, что

и, следовательно, сходимость обеспечена и является квадратичной .

Худший случай конвергенции [ править ]

Если использовать приведенную выше приблизительную оценку с вавилонским методом, то наименее точные случаи в порядке возрастания будут следующими:

Таким образом, в любом случае

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

Метод Бахшали [ править ]

Этот метод нахождения приближения к квадратному корню был описан в древнеиндийском манускрипте , называемом манускриптом Бахшали . Это эквивалентно двум итерациям вавилонского метода, с x0 начиная . Таким образом, алгоритм является четвертично сходящимся, а это означает, что количество правильных цифр аппроксимации увеличивается примерно в четыре раза с каждой итерацией. [4] Исходное представление в современных обозначениях выглядит следующим образом: Чтобы вычислить , позволять быть начальным приближением к . Затем последовательно выполните итерацию как:

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

Метод Бахшали можно обобщить на вычисление произвольного корня, в том числе дробных. [5]

Пример [ править ]

Используя тот же пример, что и для вавилонского метода, пусть Тогда первая итерация дает

Аналогично вторая итерация дает

Поразрядный расчет [ править ]

Это метод нахождения каждой цифры квадратного корня в последовательности. Этот метод основан на биномиальной теореме и, по сути, на обратном алгоритме решения . Он медленнее вавилонского метода, но имеет ряд преимуществ:

  • Это может быть проще для ручных расчетов.
  • Каждая найденная цифра корня заведомо верна, т. е. ее не нужно менять в дальнейшем.
  • Если квадратный корень имеет расширение, которое завершается, алгоритм завершается после того, как будет найдена последняя цифра. Таким образом, его можно использовать для проверки того, является ли данное целое число квадратным .
  • Алгоритм работает для любой базы , и естественно, то, как он будет действовать, зависит от выбранной базы.

Недостатками являются:

  • Это становится неуправляемым для более высоких корней.
  • Он не терпит неточных догадок или подсчетов; такие ошибки приводят к тому, что каждая следующая цифра результата оказывается неверной, в отличие от метода Ньютона , который самостоятельно исправляет любые ошибки аппроксимации.
  • Хотя поразрядные вычисления достаточно эффективны на бумаге, они слишком дороги для программных реализаций. Каждая итерация включает в себя большие числа и требует больше памяти, но увеличивает ответ только на одну правильную цифру. Таким образом, алгоритму требуется больше времени для каждой дополнительной цифры.

Кости Нейпира включают в себя средства для выполнения этого алгоритма. Алгоритм сдвига n-й корня степени является обобщением этого метода.

Основной принцип [ править ]

Сначала рассмотрим случай нахождения квадратного корня из числа Z , то есть квадрата двузначного числа XY , где X — цифра десятков, а Y — цифра единиц. Конкретно:

используя поразрядный алгоритм, мы сначала определяем значение X. Теперь , X — самая большая цифра такая, что X 2 меньше или равно Z , из которого мы удалили две крайние правые цифры.

На следующей итерации мы соединяем цифры в пары, умножаем X на 2 и помещаем его на десятое место, пытаясь выяснить, каково Y. значение

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

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

Повторно применяя базовую идентичность

член правой части можно расширить как

Это выражение позволяет нам найти квадратный корень, последовательно угадывая значения с. Предположим, что числа уже угаданы, то m -й член правой части приведенного выше суммирования определяется выражением где — это приблизительный квадратный корень, найденный на данный момент. Теперь каждая новая догадка должно удовлетворять рекурсии

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

Например, в десятичной системе счисления имеем

где являются заполнителями и коэффициентами . На любом m-м этапе вычисления квадратного корня найденный на данный момент приблизительный корень и член суммирования даны

Здесь, поскольку позиционное значение является четной степенью 10, нам нужно работать только с парой старших цифр оставшегося члена на любом m-м этапе. В разделе ниже описана эта процедура.

Очевидно, что аналогичный метод можно использовать для вычисления квадратного корня в других системах счисления, кроме десятичной. Например, нахождение квадратного корня по цифрам в двоичной системе счисления весьма эффективно, поскольку значение ищется из меньшего набора двоичных цифр {0,1}. Это ускоряет вычисление, поскольку на каждом этапе значение либо для или для . Тот факт, что у нас есть только два возможных варианта также осуществляет процесс определения стоимости на m -ом этапе расчета проще. Это потому, что нам нужно только проверить, для Если это условие выполнено, то принимаем ; если нет, то Кроме того, в вычислениях помогает тот факт, что умножение на 2 выполняется сдвигом битов влево.

Десятичная дробь (основание 10) [ править ]

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

Начиная с самой левой пары цифр, выполните следующую процедуру для каждой пары:

  1. Начиная слева, снесите самую значащую (крайнюю левую) пару еще не использованных цифр (если все цифры были использованы, напишите «00») и запишите их справа от остатка от предыдущего шага (на первом шаг, остатка не будет). Другими словами, умножьте остаток на 100 и сложите две цифры. Это будет текущее значение c .
  2. Найдите p , y и x следующим образом:
    • Пусть p будет частью найденного на данный момент корня , игнорируя любую десятичную точку. (Для первого шага p = 0.)
    • Определите наибольшую цифру x такую, что . Мы будем использовать новую переменную y = x (20 p + x ).
      • Примечание. 20 p + x — это просто удвоенное число p цифрой x . с добавленной справа
      • Примечание: x можно найти, угадав, что такое c /(20· p ), и выполнив пробное вычисление y , а затем, x . при необходимости, увеличив или уменьшив
    • Поместите цифру как следующая цифра корня, т. е. выше двух цифр квадрата, который вы только что сбили. Таким образом, следующим p будет старое p, умноженное на 10 плюс x .
  3. Вычтите y из c, чтобы образовать новый остаток.
  4. Если остаток равен нулю и больше нет цифр, которые нужно сбить, то алгоритм завершается. В противном случае вернитесь к шагу 1 для следующей итерации.

Примеры [ править ]

Найдите квадратный корень из 152,2756.

          1  2. 3  4 
       /
     \/  01 52.27 56

         01                   1*1 <= 1 < 2*2                 x=1
         01                     y = x*x = 1*1 = 1
         00 52                22*2 <= 52 < 23*3              x=2
         00 44                  y = (20+x)*x = 22*2 = 44
            08 27             243*3 <= 827 < 244*4           x=3
            07 29               y = (240+x)*x = 243*3 = 729
               98 56          2464*4 <= 9856 < 2465*5        x=4
               98 56            y = (2460+x)*x = 2464*4 = 9856
               00 00          Algorithm terminates: Answer=12.34

Двоичная система счисления (основание 2) [ править ]

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

В качестве дополнительной оптимизации мы сохраняем и , два члена в случае, если ненулевое значение в отдельных переменных , :

и можно эффективно обновлять на каждом этапе:

Обратите внимание, что:

это конечный результат, возвращаемый функцией ниже.

Реализация этого алгоритма на C: [6]

int32_t isqrt(int32_t n) {
    assert(("sqrt input should be non-negative", n > 0));

    // X_(n+1)
    int32_t x = n;

    // c_n
    int32_t c = 0;

    // d_n which starts at the highest power of four <= n
    int32_t d = 1 << 30; // The second-to-top bit is set.
                         // Same as ((unsigned) INT32_MAX + 1) / 2.
    while (d > n) {
        d >>= 2;
    }

    // for dₙ … d₀
    while (d != 0) {
        if (x >= c + d) {      // if X_(m+1) ≥ Y_m then a_m = 2^m
            x -= c + d;        // X_m = X_(m+1) - Y_m
            c = (c >> 1) + d;  // c_(m-1) = c_m/2 + d_m (a_m is 2^m)
        }
        else {
            c >>= 1;           // c_(m-1) = c_m/2      (aₘ is 0)
        }
        d >>= 2;               // d_(m-1) = d_m/4
    }
    return c;                  // c_(-1)
}

Более быстрые алгоритмы в двоичной, десятичной или любой другой системе счисления могут быть реализованы с помощью справочных таблиц, что фактически позволяет получить больше места для хранения за счет сокращения времени выполнения . [7]

Экспоненциальное тождество [ править ]

Карманные калькуляторы обычно реализуют хорошие процедуры для вычисления экспоненциальной функции и натурального логарифма , а затем вычисления квадратного корня из S, используя тождество, найденное с использованием свойств логарифмов ( ) и экспоненты ( ): [ нужна ссылка ]

Знаменатель дроби соответствует корню n- й степени. В приведенном выше случае знаменатель равен 2, следовательно, уравнение указывает, что необходимо найти квадратный корень. Тот же идентификатор используется при вычислении квадратных корней с помощью таблиц логарифмов или логарифмических правил .

Итерационный метод с двумя переменными [ править ]

Этот метод применим для нахождения квадратного корня из и сходится лучше всего для . Однако это не является реальным ограничением для компьютерных вычислений, поскольку в представлениях с плавающей запятой по основанию 2 и с фиксированной запятой умножить тривиально. в целой степени 4, и, следовательно, на соответствующую степень 2, путем изменения показателя степени или сдвига соответственно. Поэтому, можно переместить в диапазон . Более того, следующий метод не использует общего деления, а только сложения, вычитания, умножения и деления на степени двойки, которые также тривиально реализовать. Недостатком метода является накопление числовых ошибок, в отличие от итеративных методов с одной переменной, таких как вавилонский.

Шаг инициализации этого метода:

в то время как итеративные шаги читаются
Затем, (пока ).

Конвергенция , и, следовательно, также , является квадратичным.

Доказательство метода довольно простое. Сначала перепишем итеративное определение как

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

Этот метод был разработан около 1950 года М.В. Уилксом , Д.Д. Уилером и С. Гиллом. [8] для использования на EDSAC , одном из первых электронных компьютеров. [9] Позже метод был обобщен, что позволило вычислять неквадратные корни. [10]

корней Итерационные методы поиска обратных квадратных

Ниже приведены итерационные методы нахождения обратного квадратного корня из S, который равен . Как только он будет найден, найдите простым умножением: . Эти итерации включают только умножение, а не деление. Поэтому они быстрее, чем вавилонский метод . Однако они не стабильны. Если начальное значение не близко к обратному квадратному корню, итерации будут расходиться от него, а не сходиться к нему. Поэтому может быть полезно выполнить итерацию вавилонского метода с грубой оценкой, прежде чем начинать применять эти методы.

  • Применение метода Ньютона к уравнению создает метод, который сходится квадратично, используя три умножения за шаг:
  • Другая итерация получается методом Галлея , который является методом Хаусхолдера второго порядка. Это сходится кубически , но включает пять умножений на итерацию: [ нужна ссылка ]
    и
  • При выполнении арифметических операций с фиксированной запятой умножение на 3 и деление на 8 можно реализовать с помощью сдвигов и сложений. При использовании чисел с плавающей запятой метод Галлея можно сократить до четырех умножений на итерацию путем предварительного вычисления. и корректируем все остальные константы для компенсации:
    и

Алгоритм Гольдшмидта [ править ]

Некоторые компьютеры используют алгоритм Гольдшмидта для одновременного расчета. и . Алгоритм Гольдшмидта находит быстрее, чем итерация Ньютона-Рафсона на компьютере с объединенной командой умножения-сложения и либо конвейерным блоком с плавающей запятой, либо двумя независимыми блоками с плавающей запятой. [11]

Начинается первый способ написания алгоритма Гольдшмидта.

(обычно с использованием поиска по таблице)

и повторяет

до достаточно близко к 1 или фиксированному числу итераций. Итерации сходятся к
и
Обратите внимание, что можно опустить либо и из вычислений, и если оба желательны, то может использоваться в конце, а не вычисляться на каждой итерации.

Вторая форма, использующая объединенные операции умножения-сложения , начинается

(обычно с использованием поиска по таблице)

и повторяет

до достаточно близко к 0 или фиксированному числу итераций. Это сходится к
и

Серия Тейлора [ править ]

Если N является приближением к лучшее приближение можно найти, используя ряд Тейлора функции квадратного корня :

В итерационном методе порядок сходимости равен количеству используемых терминов. С двумя терминами он идентичен вавилонскому методу . При трех членах каждая итерация занимает почти столько же операций, сколько и приближение Бахшали , но сходится медленнее. [ нужна ссылка ] Поэтому это не особенно эффективный способ расчета. Чтобы максимизировать скорость сходимости, выберите N так, чтобы как можно меньше.

дроби Продолжение расширения

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

Квадратичные иррациональные числа (числа вида , где a , b и c — целые числа), и, в частности, квадратные корни из целых чисел, имеют периодические цепные дроби . Иногда требуется найти не числовое значение квадратного корня, а его разложение в непрерывную дробь и, следовательно, его рациональное приближение. Пусть S — положительное число, для которого нам необходимо найти квадратный корень. Тогда, предположив, что a — число, которое служит в качестве первоначального предположения, а r — остаточный член, мы можем написать Поскольку у нас есть , мы можем выразить квадратный корень из S как

Применяя это выражение для к знаменателю дроби, имеем

Компактное обозначение

Расширение числителя и знаменателя для цепных дробей (см. слева) сложно записывать, а также встраивать в системы форматирования текста. Поэтому математики разработали несколько альтернативных обозначений, например [12]

Когда повсюду используются еще более компактные обозначения: [13]

Для повторяющихся непрерывных дробей (что делают все квадратные корни из неполных квадратов) повторение представляется только один раз, с надчеркиванием, обозначающим непрерывное повторение перечеркнутой части: [14]

Для 2 значение равно 1, поэтому его представление:

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

Первый шаг к вычислению такой дроби [15] Чтобы получить корень, нужно выполнить числовые замены корня желаемого числа и выбранного количества знаменателей. Например, в канонической форме а для 2 равно 1 , равно 1, поэтому числовая цепная дробь для трех знаменателей равна:

Шаг 2 — сократить непрерывную дробь снизу вверх по одному знаменателю, чтобы получить рациональную дробь, числитель и знаменатель которой являются целыми числами. Приведение происходит следующим образом (беря первые три знаменателя):

Наконец (шаг 3) разделите числитель на знаменатель рациональной дроби, чтобы получить приблизительное значение корня:

округляется до трех знаков точности.

Фактическое значение 2 составляет от 1,41 до трех значащих цифр. Относительная ошибка составляет 0,17%, поэтому рациональная дробь имеет точность почти три знака. Увеличение количества знаменателей дает более качественные приближения: четыре знаменателя дают дробь , с почти 4-значной точностью и т. д.

Ниже приведены примеры квадратных корней, их простых цепных дробей и их первых членов, называемых сходящимися , до знаменателя 99 включительно:

S ~десятичный непрерывная дробь сходящийся
2 1.41421
3 1.73205
5 2.23607
6 2.44949
10 3.16228
1.77245
1.64872
1.27202

В общем, чем больше знаменатель рациональной дроби, тем лучше приближение. Также можно показать, что усечение непрерывной дроби дает рациональную дробь, которая является лучшим приближением к корню любой дроби со знаменателем, меньшим или равным знаменателю этой дроби - например, нет дроби со знаменателем, меньшим или равным 70 является таким же хорошим приближением к 2, как и 99/70.

Приближения, зависящие от представления с плавающей запятой [ править ]

Число представлено в формате с плавающей запятой как который также называется научной нотацией . Его квадратный корень и аналогичные формулы применимы для кубических корней и логарифмов. На первый взгляд, это не улучшение простоты, но предположим, что требуется только приближение: тогда просто это хорошо на порядок. Далее учтите, что некоторые степени p будут нечетными, например, для 3141,59 = 3,14159 × 10. 3 вместо того, чтобы иметь дело с дробными степенями основания, умножьте мантиссу на основание и вычтите единицу из степени, чтобы сделать ее четной. Скорректированное представление станет эквивалентом 31,4159 × 10. 2 так что квадратный корень будет 31,4159 × 10 1 .

Если взять целую часть скорректированной мантиссы, могут быть только значения от 1 до 99, и их можно использовать в качестве индекса в таблице из 99 заранее вычисленных квадратных корней для завершения оценки. Компьютеру, использующему шестнадцатеричное основание, потребовалась бы таблица большего размера, но компьютеру, использующему основание два, потребовалось бы только три записи: возможные биты целой части скорректированной мантиссы равны 01 (даже при том, что степени не было никакого сдвига, учитывая, что нормализованная число с плавающей запятой всегда имеет ненулевую старшую цифру) или, если степень была нечетной, 10 или 11, это первые два бита исходной мантиссы. Таким образом, 6,25 = 110,01 в двоичном формате, нормированном на 1,1001 × 2. 2 четная степень, поэтому парные биты мантиссы равны 01, а 0,625 = 0,101 в двоичном формате нормализуется до 1,01 × 2. −1 нечетная степень, поэтому корректировка равна 10,1 × 2 −2 а парные биты равны 10. Обратите внимание, что младший бит степени повторяется в старшем бите парной мантиссы. Младший бит четной степени равен нулю, и скорректированная мантисса начинается с 0, тогда как для нечетной степени этот бит равен единице, а скорректированная мантисса начинается с 1. Таким образом, когда степень уменьшается вдвое, это как если бы Младший бит сдвигается и становится первым битом парной мантиссы.

Таблицу, содержащую всего три записи, можно расширить за счет включения дополнительных битов мантиссы. Однако при использовании компьютеров вместо интерполяции в таблицу часто лучше найти более простой расчет, дающий эквивалентные результаты. Теперь все зависит от точных деталей формата представления, а также от того, какие операции доступны для доступа к частям числа и манипулирования ими. Например, Фортран предлагает EXPONENT(x) Функция получения власти. Усилия, затраченные на разработку хорошего начального приближения, должны окупиться за счет исключения дополнительных итераций процесса уточнения, которые потребовались бы для плохого приближения. Поскольку их немного (одна итерация требует деления, сложения и деления пополам), ограничение является серьезным.

Многие компьютеры следуют представлению IEEE (или достаточно похожему), и можно получить очень быстрое приближение к квадратному корню для запуска метода Ньютона. Следующий метод основан на том факте, что формат с плавающей запятой (по основанию два) приближается к логарифму по основанию 2. То есть

Таким образом, для 32-битного числа с плавающей запятой одинарной точности в формате IEEE (где, в частности, степень имеет смещение 127, добавленное для представленной формы) вы можете получить приблизительный логарифм, интерпретируя его двоичное представление как 32-битное целое число, масштабируя это по , и удаляя смещение 127, т.е.

Например, 1.0 представлен шестнадцатеричным числом 0x3F800000, которое будет обозначать если принять за целое число. Используя формулу выше, вы получаете , как и ожидалось от . Аналогичным образом вы получаете 0,5 из 1,5 (0x3FC00000).

Чтобы получить квадратный корень, разделите логарифм на 2 и преобразуйте значение обратно. Следующая программа демонстрирует эту идею. Младшему биту экспоненты намеренно разрешено распространяться на мантиссу. Один из способов оправдать шаги в этой программе — предположить, что - смещение показателя и — количество явно сохраненных битов в мантиссе, а затем покажите, что

/* Assumes that float is in the IEEE 754 single precision floating point format */
#include <stdint.h>
float sqrt_approx(float z)
{
	union { float f; uint32_t i; } val = {z};	/* Convert type, preserving bit pattern */
	/*
	 * To justify the following code, prove that
	 *
	 * ((((val.i / 2^m) - b) / 2) + b) * 2^m = ((val.i - 2^m) / 2) + ((b + 1) / 2) * 2^m)
	 *
	 * where
	 *
	 * b = exponent bias
	 * m = number of mantissa bits
	 */
	val.i -= 1 << 23;	/* Subtract 2^m. */
	val.i >>= 1;		/* Divide by 2. */
	val.i += 1 << 29;	/* Add ((b + 1) / 2) * 2^m. */

	return val.f;		/* Interpret again as float */
}

Три математические операции, составляющие ядро ​​вышеуказанной функции, могут быть выражены в одной строке. Для уменьшения максимальной относительной погрешности можно добавить дополнительную настройку. Итак, три операции, не считая приведения, можно переписать как

	val.i = (1 << 29) + (val.i >> 1) - (1 << 22) + a;

где a — погрешность корректировки ошибок аппроксимации. Например, при a = 0 результаты точны для четных степеней 2 (например, 1,0), но для других чисел результаты будут немного завышены (например, 1,5 для 2,0 вместо 1,414... с ошибкой 6%). При a = −0x4B0D2 максимальная относительная погрешность минимизируется до ±3,5%.

Если аппроксимация должна использоваться для первоначального предположения метода Ньютона для уравнения , то предпочтительна обратная форма, показанная в следующем разделе.

обратная квадратному корню [ править ]

Ниже приведен вариант описанной выше процедуры, который можно использовать для вычисления обратной величины квадратного корня, т.е. вместо этого его написал Грег Уолш. Приближение целочисленного сдвига дало относительную ошибку менее 4%, а ошибка упала еще до 0,15% при одной итерации метода Ньютона в следующей строке. [16] В компьютерной графике это очень эффективный способ нормализации вектора.

float invSqrt(float x) {
    float xhalf = 0.5f * x;
    union {
        float x;
        int i;
    } u;
    u.x = x;
    u.i = 0x5f375a86 - (u.i >> 1);
    /* The next line can be repeated any number of times to increase accuracy */
    u.x = u.x * (1.5f - xhalf * u.x * u.x);
    return u.x;
}

Некоторые аппаратные средства СБИС реализуют обратный квадратный корень с использованием оценки полинома второй степени с последующей итерацией Гольдшмидта . [17]

Отрицательный или комплексный квадрат [ править ]

Если S < 0, то его главный квадратный корень равен

Если S = ​​a + bi , где a и b вещественные и b ≠ 0, то его главный квадратный корень равен

В этом можно убедиться, возведя корень в квадрат. [18] [19] Здесь

является модулем S . Главный квадратный корень комплексного числа определяется как корень с неотрицательной действительной частью.

См. также [ править ]

Примечания [ править ]

  1. ^ Коэффициенты два и шесть используются, поскольку они аппроксимируют средние геометрические наименьших и наибольших возможных значений с заданным количеством цифр: и .
  2. ^ Неокругленная оценка имеет максимальную абсолютную ошибку 2,65 при 100 и максимальную относительную ошибку 26,5% при y = 1, 10 и 100.
  3. ^ Если число находится ровно посередине между двумя квадратами, например 30,5, угадайте большее число, в данном случае 6.
  4. ^ Это, кстати, уравнение касательной к y = x 2 и у = 1.

Ссылки [ править ]

Библиография [ править ]

Внешние ссылки [ править ]