Metody obliczania pierwiastków kwadratowych - Methods of computing square roots
Metody obliczania pierwiastków kwadratowych to algorytmy analizy numerycznej do znajdowania głównego lub nieujemnego pierwiastka kwadratowego (zwykle oznaczanego jako √ S , 2 √ S , lub S 1/2 ) liczby rzeczywistej. Arytmetycznie oznacza dane S, procedurę znajdowania liczby, która po pomnożeniu przez siebie daje S; algebraicznie oznacza procedurę znajdowania nieujemnego pierwiastka równania x 2 - S = 0; geometrycznie oznacza dane pole kwadratu, procedurę konstruowania boku kwadratu.
Każda liczba rzeczywista ma dwa pierwiastki kwadratowe. Główny pierwiastek kwadratowy większości liczb jest liczbą niewymierną z nieskończonym rozwinięciem dziesiętnym. W rezultacie rozszerzenie dziesiętne takiego pierwiastka kwadratowego można obliczyć tylko do pewnego przybliżenia o skończonej precyzji. Jednak nawet jeśli wyciągamy pierwiastek kwadratowy z idealnej liczby całkowitej kwadratowej, tak aby wynik miał dokładną skończoną reprezentację, procedura użyta do jej obliczenia może zwrócić tylko serię coraz dokładniejszych przybliżeń.
Ułamka reprezentację liczb rzeczywistych może być stosowany zamiast jego przecinku lub ekspansji binarnej i reprezentacja ta ma tę właściwość, że jako pierwiastek kwadratowy z dowolnej liczby racjonalnego (który nie jest już kwadratem) ma okresową, powtarzając ekspansji, podobne do jak liczby wymierne mają powtarzające się rozwinięcia w systemie notacji dziesiętnej.
Najpowszechniejsze metody analityczne są iteracyjne i składają się z dwóch etapów: znalezienia odpowiedniej wartości początkowej, a następnie iteracyjnego udoskonalenia aż do spełnienia pewnego kryterium zakończenia. Wartość początkowa może być dowolną liczbą, ale im bliższy wynikowi końcowemu, tym mniej iteracji będzie wymaganych. Najbardziej znaną taką metodą, najbardziej odpowiednią do obliczeń programowych, jest metoda Newtona, która opiera się na własności pochodnej w rachunku różniczkowym. Kilka metod, takich jak syntetyczne dzielenie papieru i ołówka i rozszerzanie szeregów, nie wymaga wartości początkowej. W niektórych aplikacjach wymagany jest pierwiastek kwadratowy liczby całkowitej , który jest pierwiastkiem kwadratowym zaokrąglonym lub obciętym do najbliższej liczby całkowitej (w tym przypadku można zastosować zmodyfikowaną procedurę).
Zastosowana metoda zależy od tego, do czego ma być użyty wynik (tj. jak dokładny musi być), ile wysiłku jest się w stanie włożyć w procedurę i jakie narzędzia są pod ręką. Metody te można z grubsza sklasyfikować jako odpowiednie do obliczeń umysłowych, te zwykle wymagające co najmniej papieru i ołówka oraz te, które są implementowane jako programy do wykonania na cyfrowym komputerze elektronicznym lub innym urządzeniu obliczeniowym. Algorytmy mogą uwzględniać zbieżność (ile iteracji jest wymaganych do uzyskania określonej precyzji), złożoność obliczeniową poszczególnych operacji (np. dzielenie) lub iteracji oraz propagację błędów (dokładność końcowego wyniku).
Procedury znajdowania pierwiastka kwadratowego (szczególnie pierwiastka kwadratowego z 2) znane są co najmniej od okresu starożytnego Babilonu w XVII wieku p.n.e. Metoda Herona z Egiptu w I wieku była pierwszym możliwym do ustalenia algorytmem obliczania pierwiastka kwadratowego. Nowoczesne metody analityczne zaczęto rozwijać po wprowadzeniu do zachodniej Europy systemu liczb arabskich we wczesnym renesansie. Obecnie prawie wszystkie urządzenia obliczeniowe mają szybką i dokładną funkcję pierwiastka kwadratowego, albo jako konstrukcję języka programowania, wewnętrzną funkcję kompilatora lub funkcję biblioteki, albo jako operator sprzętowy, w oparciu o jedną z opisanych procedur.
Wstępne oszacowanie
Wiele iteracyjnych algorytmów pierwiastka kwadratowego wymaga początkowej wartości inicjatora . Ziarno musi być niezerową liczbą dodatnią; powinien wynosić od 1 do , liczby, której pierwiastek kwadratowy jest pożądany, ponieważ pierwiastek kwadratowy musi znajdować się w tym zakresie. Jeśli ziarno znajduje się daleko od korzenia, algorytm będzie wymagał więcej iteracji. Jeśli inicjuje się z x 0 = 1 (lub S ), to w przybliżeniu iteracje zostaną zmarnowane, po prostu uzyskując rząd wielkości pierwiastka. Dlatego warto mieć przybliżone oszacowanie, które może mieć ograniczoną dokładność, ale jest łatwe do obliczenia. Ogólnie rzecz biorąc, im lepsze oszacowanie początkowe, tym szybsza konwergencja. W metodzie Newtona (zwanej również metodą babilońską lub metodą czapli) ziarno nieco większe niż korzeń zbiegnie się nieco szybciej niż ziarno nieco mniejsze niż korzeń.
Ogólnie rzecz biorąc, oszacowanie odbywa się zgodnie z arbitralnym przedziałem, o którym wiadomo, że zawiera pierwiastek (np. [x 0 , S/x 0 ]). Oszacowanie to specyficzna wartość przybliżona funkcyjnej, f (x) = √ x w przedziale. Uzyskanie lepszego oszacowania wymaga albo uzyskania ciaśniejszych granic przedziału, albo znalezienia lepszego przybliżenia funkcjonalnego do f(x). To ostatnie zwykle oznacza użycie wielomianu wyższego rzędu w aproksymacji, chociaż nie wszystkie aproksymacje są wielomianowe. Powszechnie stosowane metody szacowania to skalarne, liniowe, hiperboliczne i logarytmiczne. Podstawa dziesiętna jest zwykle używana do szacowania w myślach lub przy użyciu papieru i ołówka. Baza binarna jest bardziej odpowiednia do oszacowań komputerowych. Przy szacowaniu wykładnik i mantysa są zwykle traktowane oddzielnie, ponieważ liczba byłaby wyrażona w notacji naukowej.
Szacunki dziesiętne
Zazwyczaj liczba jest wyrażana w notacji naukowej jako gdzie i n jest liczbą całkowitą, a zakres możliwych pierwiastków kwadratowych to gdzie .
Szacunki skalarne
Metody skalarne dzielą zakres na przedziały, a oszacowanie w każdym przedziale jest reprezentowane przez pojedynczą liczbę skalarną. Jeśli zakres jest traktowany jako pojedynczy przedział, średnia arytmetyczna (5,5) lub średnia geometryczna ( ) razy są wiarygodnymi szacunkami. Błąd bezwzględny i względny dla nich będzie się różnić. Ogólnie rzecz biorąc, pojedynczy skalar będzie bardzo niedokładny. Lepsze oszacowania dzielą zakres na dwa lub więcej przedziałów, ale oszacowania skalarne mają z natury niską dokładność.
Dla dwóch przedziałów, podzielonych geometrycznie, pierwiastek kwadratowy można oszacować jako
To oszacowanie ma maksymalny błąd bezwzględny przy a = 100 i maksymalny błąd względny 100% przy a = 1.
Na przykład dla faktorów jako , oszacowanie wynosi . , błąd bezwzględny 246 i błąd względny prawie 70%.
Szacunki liniowe
Lepszym oszacowaniem i stosowana standardowa metoda jest liniowe przybliżenie funkcji na małym łuku. Jeżeli, jak wyżej, potęgi podstawy są wyliczane z liczby, a przedział sprowadzany do [1100], jako aproksymację można zastosować sieczną obejmującą łuk lub styczną leżącą gdzieś wzdłuż łuku, ale co najmniej: kwadratowa linia regresji przecinająca łuk będzie dokładniejsza.
Linia regresji najmniejszych kwadratów minimalizuje średnią różnicę między oszacowaniem a wartością funkcji. Jego równanie to . Zmiana kolejności, . Zaokrąglanie współczynników dla ułatwienia obliczeń,
Jest to najlepsze średnie oszacowanie, jakie można uzyskać za pomocą jednoelementowej aproksymacji liniowej funkcji y=x 2 w przedziale [1100]. Ma maksymalny błąd bezwzględny 1,2 przy a=100 i maksymalny błąd względny 30% przy S=1 i 10.
Aby podzielić przez 10, odejmij jeden od wykładnika , lub przenośnie przesuń kropkę dziesiętną o jedną cyfrę w lewo. W przypadku tego sformułowania dowolna stała dodawania 1 plus mały przyrost da zadowalające oszacowanie, więc zapamiętanie dokładnej liczby nie jest uciążliwe. Aproksymacja (zaokrąglona lub nie) przy użyciu pojedynczej linii obejmującej zakres [1100] jest mniejsza niż jedna cyfra znacząca precyzji; względny błąd jest większy od 1/2 2 , to przewidziane są mniej niż 2 bity informacji. Dokładność jest poważnie ograniczona, ponieważ zakres wynosi dwa rzędy wielkości, dość duży dla tego rodzaju estymacji.
Znacznie lepsze oszacowanie można uzyskać przez aproksymację liniową odcinkową: wiele segmentów linii, z których każdy aproksymuje pewien podłuk oryginału. Im więcej użytych odcinków linii, tym lepsze przybliżenie. Najpopularniejszym sposobem jest użycie linii stycznych; najważniejsze wybory to sposób podziału łuku i umiejscowienie punktów stycznych. Skutecznym sposobem na podzielenie łuku od y=1 do y=100 jest geometrycznie: dla dwóch przedziałów granice przedziałów są pierwiastkiem kwadratowym z granic pierwotnego przedziału, 1*100, czyli [1, 2 √ 100 ] i [ 2 √ 100 ,100]. Dla trzech przedziałów granicami są pierwiastki sześcienne liczby 100: [1, 3 √ 100 ], [ 3 √ 100 ,( 3 √ 100 ) 2 ] i [( 3 √ 100 ) 2 ,100] itd. Dla dwóch interwały, 2 √ 100 = 10, bardzo wygodna liczba. Linie styczne są łatwe do wyprowadzenia i znajdują się w x = √ 1* √ 10 i x = √ 10* √ 10 . Ich równania to: y = 3,56x - 3,16 i y = 11,2x - 31,6. Odwracając, pierwiastki kwadratowe wynoszą: x = 0,28y + 0,89 i x = 0,089y + 2,8. Zatem dla S = a * 10 2n :
Maksymalne błędy bezwzględne występują w najwyższych punktach przedziałów, przy a=10 i 100 i wynoszą odpowiednio 0,54 i 1,7. Maksymalne błędy względne znajdują się w punktach końcowych przedziałów, przy a=1, 10 i 100, i wynoszą 17% w obu przypadkach. 17% lub 0,17 jest większe niż 1/10, więc metoda daje dokładność mniejszą niż cyfra dziesiętna.
Szacunki hiperboliczne
W niektórych przypadkach oszacowania hiperboliczne mogą być skuteczne, ponieważ hiperbola jest również krzywą wypukłą i może leżeć wzdłuż łuku Y = x 2 lepiej niż linia. Szacunki hiperboliczne są bardziej złożone obliczeniowo, ponieważ z konieczności wymagają dzielenia zmiennego. Prawie optymalne przybliżenie hiperboliczne do x 2 w przedziale [1100] to y=190/(10-x)-20. Transponując pierwiastek kwadratowy to x = -190/(y+20)+10. Tak więc dla :
Dzielenie zmiennoprzecinkowe musi być dokładne tylko do jednej cyfry dziesiętnej, ponieważ ogólne oszacowanie jest tylko tak dokładne i można to zrobić mentalnie. Oszacowanie hiperboliczne jest średnio lepsze niż oszacowanie skalarne lub liniowe. Ma maksymalny błąd bezwzględny 1,58 przy 100 i maksymalny błąd względny 16,0% przy 10. W najgorszym przypadku przy a=10 oszacowanie wynosi 3,67. Jeśli jeden zaczyna się od 10 i od razu stosuje iteracje Newtona-Raphsona, wymagane będą dwie iteracje, dające 3,66, zanim dokładność oszacowania hiperbolicznego zostanie przekroczona. W bardziej typowym przypadku, takim jak 75, oszacowanie hiperboliczne wynosi 8,00, a do uzyskania dokładniejszego wyniku wymagane jest 5 iteracji Newtona-Raphsona, zaczynając od 75.
Szacunki arytmetyczne
Metoda analogiczna do aproksymacji liniowej kawałkami, ale używająca tylko arytmetyki zamiast równań algebraicznych, wykorzystuje tabliczki mnożenia w odwrotnej kolejności: pierwiastek kwadratowy z liczby od 1 do 100 wynosi od 1 do 10, więc jeśli wiemy, że 25 jest idealnym kwadratem (5 × 5), a 36 jest idealnym kwadratem (6 × 6), to pierwiastek kwadratowy z liczby większej lub równej 25, ale mniejszej niż 36, zaczyna się od 5. Podobnie dla liczb między innymi kwadratami. Ta metoda da poprawną pierwszą cyfrę, ale nie jest dokładna do jednej cyfry: na przykład pierwsza cyfra pierwiastka kwadratowego z 35 to 5, ale pierwiastek kwadratowy z 35 to prawie 6.
Lepszym sposobem jest podzielenie zakresu na interwały w połowie odległości między kwadratami. Tak więc dowolna liczba od 25 do połowy drogi do 36, czyli 30,5, oszacuj 5; dowolna liczba większa niż 30,5 do 36, oszacowanie 6. Procedura wymaga jedynie trochę arytmetyki, aby znaleźć liczbę graniczną w środku dwóch iloczynów z tabliczki mnożenia. Oto tabela referencyjna tych granic:
| a | najbliższy plac | szac. |
|---|---|---|
| 1 do 2,5 | 1 (= 1 2 ) | 1 |
| 2,5 do 6,5 | 4 (= 2 2 ) | 2 |
| 6,5 do 12,5 | 9 (= 3 2 ) | 3 |
| 12,5 do 20,5 | 16 (= 4 2 ) | 4 |
| 20,5 do 30,5 | 25 (= 5 2 ) | 5 |
| 30,5 do 42,5 | 36 (= 6 2 ) | 6 |
| 42,5 do 56,5 | 49 (= 7 2 ) | 7 |
| 56,5 do 72,5 | 64 (= 8 2 ) | 8 |
| 72,5 do 90,5 | 81 (= 9 2 ) | 9 |
| 90,5 do 100 | 100 (= 10 2 ) | 10 |
Ostatnią operacją jest pomnożenie oszacowania k przez potęgę dziesiątki podzielone przez 2, więc dla ,
Metoda niejawnie daje jedną znaczącą cyfrę dokładności, ponieważ zaokrągla się do najlepszej pierwszej cyfry.
W większości przypadków metodę można rozszerzyć o 3 cyfry znaczące, interpolując między najbliższymi kwadratami ograniczającymi operand. Jeśli , to w przybliżeniu k plus ułamek, różnica między a i k 2 podzielona przez różnicę między dwoma kwadratami:
- gdzie
Ostatnią operacją, jak wyżej, jest pomnożenie wyniku przez potęgę dziesiątki podzielone przez 2;
k to cyfra dziesiętna, a R to ułamek, który należy przekonwertować na dziesiętny. Zwykle ma tylko jedną cyfrę w liczniku i jedną lub dwie cyfry w mianowniku, więc konwersję na dziesiętną można wykonać mentalnie.
Przykład: znalezienie pierwiastka kwadratowego 75. 75 = 75 x 10 2 · 0 , więc wynosi 75, a n wynosi 0. Z tabel mnożenie pierwiastek kwadratowy mantysie musi być 8 punkt coś ponieważ 8 x 8 64 ale 9 × 9 to 81, więc jest za duże, więc k to 8; coś jest dziesiętną reprezentacją R . Ułamek R to 75 - k 2 = 11, licznik, a 81 - k 2 = 17, mianownik. 11/17 to trochę mniej niż 12/18, czyli 2/3 lub 0,67, więc zgadnij 0,66 (można zgadnąć, błąd jest bardzo mały). Szacunek wynosi więc 8 + 0,66 = 8,66 . √ 75 do trzech cyfr znaczących to 8,66, więc szacunek jest dobry do 3 cyfr znaczących. Nie wszystkie takie szacunki przy użyciu tej metody będą tak dokładne, ale będą bliskie.
Szacunki binarne
Podczas pracy w systemie liczb binarnych (tak jak komputery wewnętrznie), wyrażając jako gdzie , pierwiastek kwadratowy można oszacować jako
która jest linią regresji najmniejszych kwadratów do 3 współczynników cyfr znaczących. ma maksymalny błąd bezwzględny 0,0408 przy =2 i maksymalny błąd względny 3,0% przy =1. Wygodne obliczeniowo zaokrąglone oszacowanie (ponieważ współczynniki są potęgami 2) to:
który ma maksymalny błąd bezwzględny 0,086 przy 2 i maksymalny błąd względny 6,1% przy =0,5 i =2,0.
Dla , przybliżenie binarne daje . , więc szacunek ma błąd bezwzględny 19 i błąd względny 5,3%. Błąd względny jest nieco mniejszy niż 1/2 4 , więc oszacowanie jest dobre do ponad 4 bitów.
Szacunek dla dobrych do 8 bitów można uzyskać przez przeszukiwanie tablicy na wyższych 8 bitach , pamiętając, że wysoki bit jest niejawny w większości reprezentacji zmiennoprzecinkowych, a dolny bit 8 powinien być zaokrąglony. Tabela zawiera 256 bajtów wstępnie obliczonych 8-bitowych wartości pierwiastka kwadratowego. Na przykład dla indeksu 11101101 2 reprezentującego 1.8515625 10 wpis to 10101110 2 reprezentujący 1.359375 10 , pierwiastek kwadratowy z 1.8515625 precyzja od 10 do 8 bitów (2+ cyfry dziesiętne).
Metoda babilońska
Być może pierwszy algorytm używany do aproksymacji jest znany jako metoda babilońska , mimo że nie ma bezpośrednich dowodów poza poinformowanymi przypuszczeniami, że tytułowi matematycy babilońscy zastosowali tę metodę. Metoda ta jest również znana jako metoda Herona , na cześć greckiego matematyka Hero z Aleksandrii, który pierwszy w historii opisał tę metodę w swoim dziele Metrica z roku 60 ne . Podstawowa idea jest taka, że jeśli x jest przeszacowaniem pierwiastka kwadratowego z nieujemnej liczby rzeczywistej S to S/xbędzie niedoszacowaniem lub odwrotnie, więc można racjonalnie oczekiwać, że średnia z tych dwóch liczb zapewni lepsze przybliżenie (chociaż formalny dowód tego twierdzenia zależy od nierówności średnich arytmetycznych i geometrycznych, która pokazuje, że ta średnia jest zawsze przeszacować pierwiastek kwadratowy, jak zauważono w artykule o pierwiastkach kwadratowych , zapewniając w ten sposób zbieżność). Jest to równoważne użyciu metody Newtona do rozwiązania .
Dokładniej, jeśli x jest naszym początkowym przypuszczeniem, a ε jest błędem w naszym oszacowaniu takim, że S = ( x + ε ) 2 , wtedy możemy rozwinąć dwumian i znaleźć
- od .
W związku z tym możemy zrekompensować błąd i zaktualizować nasze stare oszacowanie jako
Ponieważ wyliczony błąd nie był dokładny, staje się to naszym kolejnym najlepszym przypuszczeniem. Proces aktualizacji jest powtarzany aż do uzyskania pożądanej dokładności. Jest to algorytm zbieżny do kwadratu , co oznacza, że liczba poprawnych cyfr aproksymacji w przybliżeniu podwaja się z każdą iteracją. Przebiega w następujący sposób:
- Zacznij od dowolnej dodatniej wartości początkowej x 0 (im bliżej rzeczywistego pierwiastka kwadratowego z S , tym lepiej).
- Niech x n + 1 będzie średnią z x n iS/x n(stosując średnią arytmetyczną do przybliżenia średniej geometrycznej ).
- Powtarzaj krok 2, aż do uzyskania żądanej dokładności.
Może być również reprezentowany jako:
Algorytm ten działa równie dobrze w liczbach p -adycznych , ale nie może być użyty do identyfikacji rzeczywistych pierwiastków kwadratowych z p -adycznymi pierwiastkami kwadratowymi; można na przykład skonstruować tą metodą ciąg liczb wymiernych, który jest zbieżny do +3 w liczbach rzeczywistych, ale do -3 w 2-adics.
Przykład
Aby obliczyć √ S , gdzie S = 125348, do sześciu cyfr znaczących, użyj powyższej metody przybliżonego oszacowania, aby uzyskać
W związku z tym √ 125348 ≈ 354,045 .
Konwergencja
Załóżmy, że x 0 > 0 i S > 0. Wtedy dla dowolnej liczby naturalnej n , x n > 0. Niech względny błąd w x n będzie zdefiniowany przez
a zatem
Wtedy można wykazać, że
A zatem, że
iw konsekwencji zapewniona jest zbieżność, a kwadratowa .
Najgorszy przypadek konwergencji
Jeśli użyjemy powyższego przybliżonego oszacowania z metodą babilońską, to najmniej dokładne przypadki w kolejności rosnącej są następujące:
Tak więc w każdym razie
Błędy zaokrąglania spowolnią zbieżność. Zaleca się zachowanie co najmniej jednej dodatkowej cyfry poza pożądaną dokładnością obliczanego x n , aby zminimalizować błąd zaokrąglenia.
Metoda Bachszali
Ta metoda znajdowania przybliżenia do pierwiastka kwadratowego została opisana w starożytnym indyjskim manuskrypcie matematycznym zwanym manuskryptem Bakhshali . Jest to równoważne dwóm iteracji metody babilońskiej zaczynającej się od x 0 . Zatem algorytm jest zbieżny kwartalnie, co oznacza, że liczba poprawnych cyfr aproksymacji wzrasta w przybliżeniu czterokrotnie przy każdej iteracji. Oryginalna prezentacja przy użyciu nowoczesnej notacji jest następująca: Aby obliczyć , niech x 0 2 będzie początkowym przybliżeniem do S . Następnie kolejno powtarzaj jako:
Można to wykorzystać do skonstruowania wymiernego przybliżenia pierwiastka kwadratowego, zaczynając od liczby całkowitej. Jeśli x 0 = N jest liczbą całkowitą wybraną tak, że N 2 jest bliskie S , a d = S − N 2 jest różnicą, której wartość bezwzględna jest minimalizowana, to pierwszą iterację można zapisać jako:
Metodę Bakhshali można uogólnić do obliczania dowolnego pierwiastka, w tym pierwiastka ułamkowego.
Przykład
Posługując się tym samym przykładem, który podano w przypadku metody babilońskiej, niech pierwsza iteracja daje:
Podobnie druga iteracja daje
Obliczanie cyfra po cyfrze
Jest to metoda znajdowania każdej cyfry pierwiastka kwadratowego w sekwencji. Jest wolniejszy niż metoda babilońska, ale ma kilka zalet:
- Ręczne obliczenia mogą być łatwiejsze.
- Wiadomo, że każda znaleziona cyfra korzenia jest poprawna, tzn. nie trzeba jej później zmieniać.
- Jeśli pierwiastek kwadratowy ma rozwinięcie, które się kończy, algorytm kończy się po znalezieniu ostatniej cyfry. W ten sposób można go wykorzystać do sprawdzenia, czy dana liczba całkowita jest liczbą kwadratową .
- Algorytm działa dla dowolnej bazy i oczywiście sposób jego działania zależy od wybranej bazy.
Kości Napiera zawierają pomoc w wykonaniu tego algorytmu. Przesunięcie n p algorytm główny jest uogólnieniem tego sposobu.
Podstawowa zasada
Najpierw rozważmy przypadek znalezienia pierwiastka kwadratowego z liczby Z , czyli kwadratu liczby dwucyfrowej XY , gdzie X to cyfra dziesiątek, a Y to cyfra jednostek. Konkretnie:
Z = (10X + Y) 2 = 100X 2 + 20XY + Y 2
Teraz używając algorytmu cyfra po cyfrze, najpierw określamy wartość X . X jest największą cyfrą taką, że X 2 jest mniejsze lub równe Z, z którego usunęliśmy dwie skrajne prawe cyfry.
W następnej iteracji, powiązać cyfry należy pomnożyć X przez 2, i umieścić go w miejscu dziesiątym, podczas gdy staramy się zorientować się, jaka jest wartość Y jest.
Ponieważ jest to prosty przypadek, w którym odpowiedzią jest pierwiastek kwadratowy XY , algorytm zatrzymuje się w tym miejscu.
Ten sam pomysł można następnie rozszerzyć na dowolne obliczenia pierwiastka kwadratowego. Załóżmy, że jesteśmy w stanie znaleźć pierwiastek kwadratowy z N , wyrażając go jako sumę n liczb dodatnich takich, że
Wielokrotnie stosując podstawową tożsamość
termin po prawej stronie można rozszerzyć jako
To wyrażenie pozwala nam znaleźć pierwiastek kwadratowy poprzez sekwencyjne zgadywanie wartości s. Załóżmy, że liczby zostały już odgadnięte, wtedy m-ty wyraz prawej strony powyższego sumowania jest podany przez gdzie jest przybliżonym pierwiastkiem kwadratowym znalezionym do tej pory. Teraz każde nowe przypuszczenie powinno zadowolić rekurencję
tak, że dla wszystkich z inicjalizacją Kiedy znaleziono dokładny pierwiastek kwadratowy; jeśli nie, to suma s daje odpowiednią aproksymację pierwiastka kwadratowego, gdzie jest błędem aproksymacji.
Na przykład w systemie liczb dziesiętnych mamy
gdzie są posiadacze miejsca i współczynniki . Na dowolnym m-tym etapie obliczania pierwiastka kwadratowego, przybliżony pierwiastek znaleziony do tej pory oraz termin sumowania są podane przez
Tutaj, ponieważ wartość miejsca jest parzystą potęgą 10, musimy pracować tylko z parą najbardziej znaczących cyfr pozostałego wyrazu na dowolnym m-tym etapie. Poniższa sekcja kodyfikuje tę procedurę.
Jest oczywiste, że podobną metodę można zastosować do obliczenia pierwiastka kwadratowego w systemach liczbowych innych niż system liczb dziesiętnych. Na przykład znalezienie pierwiastka kwadratowego cyfra po cyfrze w systemie liczb binarnych jest dość wydajne, ponieważ wartość jest wyszukiwana z mniejszego zestawu cyfr binarnych {0,1}. To sprawia, że obliczenia są szybsze, ponieważ na każdym etapie wartość jest albo for albo for . Fakt, że mamy tylko dwie możliwe opcje, również ułatwia ustalenie wartości na m-tym etapie obliczeń. Dzieje się tak dlatego, że musimy tylko sprawdzić, czy dla Jeśli ten warunek jest spełniony, to bierzemy ; jeśli nie, to również fakt, że mnożenie przez 2 jest wykonywane przez lewe przesunięcia bitowe, pomaga w obliczeniach.
Dziesiętny (podstawa 10)
Zapisz oryginalną liczbę w postaci dziesiętnej. Liczby są pisane podobnie do algorytmu dzielenia długiego i tak jak w przypadku dzielenia długiego, pierwiastek zostanie zapisany w wierszu powyżej. Teraz podziel cyfry na pary, zaczynając od przecinka i idąc w lewo iw prawo. Punkt dziesiętny pierwiastka będzie powyżej punktu dziesiętnego kwadratu. Jedna cyfra pierwiastka pojawi się nad każdą parą cyfr kwadratu.
Rozpoczynając od skrajnej lewej pary cyfr, wykonaj następującą procedurę dla każdej pary:
- Zaczynając od lewej, sprowadź w dół najbardziej znaczącą (od lewej) parę cyfr, która nie została jeszcze użyta (jeśli wszystkie cyfry zostały użyte, wpisz „00”) i zapisz je po prawej stronie reszty z poprzedniego kroku (na pierwszym kroku, nie będzie żadnej pozostałości). Innymi słowy, pomnóż resztę przez 100 i dodaj dwie cyfry. Będzie to aktualna wartość c .
- Znajdź p , y i x , w następujący sposób:
- Niech p będzie częścią pierwiastka znalezioną do tej pory , ignorując wszelkie przecinki dziesiętne. (W pierwszym kroku p = 0.)
- Wyznacz największą cyfrę x taką, że . Użyjemy nowej zmiennej y = x (20 p + x ).
- Uwaga: 20 p + x to po prostu dwa razy p , z cyfrą x dołączoną po prawej stronie.
- Uwaga: x można znaleźć, zgadując, co to jest c /(20· p ) i wykonując próbne obliczenie y , a następnie dostosowując x w górę lub w dół, jeśli to konieczne.
- Umieść cyfrę jako następną cyfrę pierwiastka, tj. nad dwiema cyframi kwadratu, który właśnie sprowadziłeś. Zatem następne p będzie starym p razy 10 plus x .
- Odejmij y od c, aby utworzyć nową resztę.
- Jeśli reszta wynosi zero i nie ma więcej cyfr do obniżenia, algorytm się kończy. W przeciwnym razie wróć do kroku 1, aby wykonać kolejną iterację.
Przykłady
Znajdź pierwiastek kwadratowy z 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 is 12.34
Binarny system liczbowy (podstawa 2)
Nieodłącznym elementem algorytmów cyfra po cyfrze jest wyszukiwanie i testowanie: znajdź cyfrę, , po dodaniu po prawej stronie bieżącego rozwiązania , taką, że , gdzie jest wartością, dla której pożądany jest pierwiastek. Rozwijanie: . Bieżąca wartość — lub zwykle reszta — może być skutecznie aktualizowana przyrostowo podczas pracy w trybie binarnym, ponieważ wartość będzie miała ustawiony pojedynczy bit (potęga 2), a operacje potrzebne do obliczenia i można je zastąpić szybsze operacje przesunięcia bitowego .
Przykład
Tutaj otrzymujemy pierwiastek kwadratowy z 81, co po przeliczeniu na binarne daje 1010001. Liczby w lewej kolumnie dają opcję między tą liczbą a zerem, która ma być użyta do odejmowania na tym etapie obliczeń. Ostateczna odpowiedź to 1001, co po przecinku to 9.
1 0 0 1
---------
√ 1010001
1 1
1
---------
101 01
0
--------
1001 100
0
--------
10001 10001
10001
-------
0
Daje to początek prostym implementacjom komputerowym, takim jak ta w C:
int32_t isqrt(int32_t num) {
assert(("sqrt input should be non-negative", num > 0));
int32_t res = 0;
int32_t bit = 1 << 30; // The second-to-top bit is set.
// Same as ((unsigned) INT32_MAX + 1) / 2.
// "bit" starts at the highest power of four <= the argument.
while (bit > num)
bit >>= 2;
while (bit != 0) {
if (num >= res + bit) {
num -= res + bit;
res = (res >> 1) + bit;
} else
res >>= 1;
bit >>= 2;
}
return res;
}
Używając powyższego zapisu, zmienna „bit” odpowiada której is , zmienna „res” jest równa , a zmienna „num” jest równa prądowi, który jest różnicą liczby, z której chcemy uzyskać pierwiastek kwadratowy i kwadrat naszego obecnego przybliżenia ze wszystkimi bitami ustawionymi na . Tak więc w pierwszej pętli chcemy znaleźć najwyższą potęgę 4 w „bit”, aby znaleźć najwyższą potęgę 2 w . W drugiej pętli, jeśli liczba jest większa niż res + bit, to jest większa niż i możemy ją odjąć. Następna linia, chcemy dodać do której środki chcemy dodać do tak chcemy . Następnie zaktualizuj do inside res, co polega na podzieleniu przez 2 lub innym przesunięciu w prawo. Połączenie tych 2 w jedną linię prowadzi do . Jeśli nie jest większe lub równe, to po prostu aktualizujemy do wnętrza res i dzielimy przez 2. Następnie aktualizujemy do in bit dzieląc go przez 4. Końcowa iteracja drugiej pętli ma bit równy 1 i spowoduje aktualizację uruchomić jeden dodatkowy czas, usuwając czynnik 2 z res, czyniąc go naszym przybliżeniem liczby całkowitej dla pierwiastka.
res = res + bit<<1res = res>>1 + bit
Szybsze algorytmy, w postaci binarnej i dziesiętnej lub dowolnej innej podstawie, można realizować za pomocą tabel przeglądowych — w efekcie handlując większą ilością miejsca na dane w celu skrócenia czasu działania .
Tożsamość wykładnicza
Kalkulatory kieszonkowe zazwyczaj implementują dobre procedury do obliczania funkcji wykładniczej i logarytmu naturalnego , a następnie obliczają pierwiastek kwadratowy z S używając tożsamości znalezionej przy użyciu właściwości logarytmów ( ) i wykładników ( ):
Mianownik ułamka odpowiada n-temu pierwiastkowi. W powyższym przypadku mianownik wynosi 2, stąd równanie określa, że należy znaleźć pierwiastek kwadratowy. Ta sama tożsamość jest używana podczas obliczania pierwiastków kwadratowych za pomocą tabel logarytmicznych lub suwaków .
Metoda iteracyjna z dwiema zmiennymi
Ta metoda ma zastosowanie do znajdowania pierwiastka kwadratowego i zbieżności dla . Nie stanowi to jednak prawdziwego ograniczenia dla obliczeń komputerowych, ponieważ w reprezentacjach zmiennoprzecinkowych i stałoprzecinkowych o podstawie 2 trywialne jest pomnożenie przez liczbę całkowitą 4, a zatem przez odpowiednią potęgę 2, zmieniając wykładnik lub poprzez przesunięcie, odpowiednio. Dlatego można je przenieść do zakresu . Co więcej, poniższa metoda nie wykorzystuje ogólnych dzieleń, ale tylko dodawania, odejmowania, mnożenia i dzielenia przez potęgi dwójki, które znowu są trywialne do wykonania. Wadą tej metody jest kumulacja błędów numerycznych, w przeciwieństwie do metod iteracyjnych z pojedynczą zmienną, takich jak babilońska.
Etap inicjalizacji tej metody to
podczas gdy iteracyjne kroki czytają
Następnie (podczas gdy ).
Zauważ, że zbieżność , a zatem także , jest kwadratowa.
Dowód metody jest dość prosty. Najpierw przepisz iteracyjną definicję as
- .
Wtedy łatwo jest udowodnić przez indukcję, że
a zatem zbieżność do pożądanego wyniku zapewnia zbieżność do 0, co z kolei wynika z .
Metoda ta została opracowana około 1950 roku przez MV Wilkesa , DJa Wheelera i S. Gilla do zastosowania w EDSAC , jednym z pierwszych komputerów elektronicznych. Metoda została później uogólniona, umożliwiając obliczanie pierwiastków niekwadratowych.
Metody iteracyjne dla odwrotności pierwiastków kwadratowych
Poniżej przedstawiono iteracyjne metody znajdowania odwrotnego pierwiastka kwadratowego z S, którym jest . Po znalezieniu znajdź przez proste mnożenie: . Te iteracje obejmują tylko mnożenie, a nie dzielenie. Dlatego są szybsze niż metoda babilońska . Nie są jednak stabilne. Jeśli wartość początkowa nie jest zbliżona do odwrotności pierwiastka kwadratowego, iteracje odbiegają od niej, a nie zbiegają do niej. Dlatego może być korzystne wykonanie iteracji metody babilońskiej na przybliżonym oszacowaniu przed rozpoczęciem stosowania tych metod.
- Zastosowanie metody Newtona do równania daje metodę, która zbiega się kwadratowo, wykorzystując trzy mnożenia na krok:
- Kolejną iterację uzyskuje się metodą Halleya , która jest metodą drugiego rzędu według Householdera . To zbiega się sześciennie , ale obejmuje pięć mnożeń na iterację:
- , oraz
- .
- Jeśli robisz arytmetykę stałoprzecinkową , mnożenie przez 3 i dzielenie przez 8 można zaimplementować za pomocą przesunięć i dodawania. Jeśli używasz zmiennoprzecinkowych, metodę Halleya można zredukować do czterech mnożeń na iterację poprzez wstępne obliczenie i dostosowanie wszystkich innych stałych w celu skompensowania:
- , oraz
- .
Algorytm Goldschmidta
Niektóre komputery używają algorytmu Goldschmidta do jednoczesnego obliczania i . Algorytm Goldschmidta znajduje szybciej niż iteracja Newtona-Raphsona na komputerze za pomocą połączonej instrukcji mnożenia-dodaj i albo potokowej jednostki zmiennoprzecinkowej, albo dwóch niezależnych jednostek zmiennoprzecinkowych.
Zaczyna się pierwszy sposób pisania algorytmu Goldschmidta
- (zwykle przy użyciu wyszukiwania w tabeli)
i iteruje
dopóki jest wystarczająco bliski 1 lub ustalonej liczby iteracji. Iteracje zbiegają się do
- , oraz
- .
Należy zauważyć, że możliwe jest pominięcie jednego i jednego z obliczeń, a jeśli oba są pożądane, można użyć ich na końcu zamiast obliczać je w każdej iteracji.
Rozpoczyna się druga forma, wykorzystująca połączone operacje mnożenia i dodawania
- (zwykle przy użyciu wyszukiwania w tabeli)
i iteruje
dopóki jest wystarczająco bliski 0 lub ustaloną liczbę iteracji. To zbiega się do
- , oraz
- .
Seria Taylora
Jeśli N jest przybliżeniem , lepszym przybliżeniem można znaleźć za pomocą szeregu Taylora na pierwiastek kwadratowy z funkcji:
Jako metoda iteracyjna, kolejność zbieżności jest równa liczbie użytych terminów. W dwóch terminach jest identyczna z metodą babilońską . W przypadku trzech wyrazów każda iteracja wymaga prawie tylu operacji, co przybliżenie Bachszali , ale zbiega się wolniej. Dlatego nie jest to szczególnie efektywny sposób obliczania. Aby zmaksymalizować szybkość zbieżności, wybierz N tak, aby był jak najmniejszy.
Kontynuacja ekspansji frakcji
Kwadratowe liczby niewymierne (liczby postaci , gdzie a , b i c są liczbami całkowitymi), aw szczególności pierwiastki kwadratowe liczb całkowitych, mają okresowe ułamki ciągłe . Czasami pożądane jest znalezienie nie liczbowej wartości pierwiastka kwadratowego, ale raczej jego dalszego rozszerzania ułamka , a więc jego racjonalnego przybliżenia. Niech S będzie liczbą dodatnią, dla której musimy znaleźć pierwiastek kwadratowy. Następnie zakładając, że a jest liczbą, która służy jako wstępne odgadnięcie, a r jest pozostałym wyrazem, możemy napisać Ponieważ mamy , możemy wyrazić pierwiastek kwadratowy z S jako
Stosując to wyrażenie for do mianownika ułamka, mamy
Rozwijanie licznik/mianownik dla ułamków ciągłych (patrz po lewej) jest kłopotliwe do pisania, jak również do osadzania w systemach formatowania tekstu. W związku z tym opracowano specjalną notację, aby zwięźle reprezentować liczby całkowite i powtarzające się części ułamków ciągłych. Jedną z takich konwencji jest użycie leksykalnej „nogi psa” do reprezentowania vinculum między licznikiem a mianownikiem, co pozwala na rozszerzenie ułamka w poziomie zamiast w pionie:
Tutaj każde vinculum jest reprezentowane przez trzy segmenty linii, dwa pionowe i jeden poziomy, oddzielające od .
Jeszcze bardziej zwarta notacja, pomijająca środki leksykalne, przybiera specjalną formę:
W przypadku powtarzania ułamków ciągłych (co robią wszystkie pierwiastki kwadratowe), powtórzenie jest przedstawiane tylko raz, z nadkreśleniem oznaczającym niekończące się powtórzenie nadkreślonej części:
Dla √ 2 , wartość wynosi 1, więc jej reprezentacją jest:
Postępując w ten sposób, otrzymujemy uogólniony ułamek łańcuchowy dla pierwiastka kwadratowego as
Pierwszym krokiem do oceny takiego ułamka w celu uzyskania pierwiastka jest wykonanie podstawień liczbowych dla pierwiastka żądanej liczby i wybranej liczby mianowników. Na przykład, w postaci kanonicznej jest 1 i √ 2 , to 1, więc liczbowa ułamka 3 mianowniku jest:
Krok 2 polega na zmniejszeniu ułamka łańcuchowego od dołu do góry, o jeden mianownik na raz, aby uzyskać ułamek wymierny, którego licznik i mianownik są liczbami całkowitymi. Redukcja przebiega w ten sposób (biorąc pierwsze trzy mianowniki):
Na koniec (krok 3) podziel licznik przez mianownik ułamka wymiernego, aby uzyskać przybliżoną wartość pierwiastka:
- zaokrąglone do trzech cyfr precyzji.
Rzeczywista wartość √ 2 wynosi 1,41 do trzech cyfr znaczących. Błąd względny wynosi 0,17%, więc ułamek wymierny jest dobry z dokładnością do prawie trzech cyfr. Wzięcie większej liczby mianowników daje kolejno lepsze przybliżenia: cztery mianowniki dają ułamek , dobry do prawie 4 cyfr dokładności itp.
Zwykle ułamek łańcuchowy dla danego pierwiastka kwadratowego jest sprawdzany, a nie rozwijany w miejscu, ponieważ jego rozwijanie jest nużące. Ułamki ciągłe są dostępne dla co najmniej pierwiastków kwadratowych małych liczb całkowitych i wspólnych stałych. W przypadku dowolnej liczby dziesiętnej wstępnie obliczone źródła mogą być bezużyteczne. Poniżej znajduje się tabela małych ułamków wymiernych zwanych zbieżnymi zredukowanymi z kanonicznych ułamków ciągłych dla pierwiastków kwadratowych kilku wspólnych stałych:
| √ S | cd. frakcja | ~dziesiętny | zbieżne |
|---|---|---|---|
| √ 2 | 1.41421 | ||
| √ 3 | 1.73205 | ||
| √ 5 | 2.23607 | ||
| √ 6 | 2,44949 | ||
| √ 10 | 3.16228 | ||
| 1.77245 | |||
| 1,64872 | |||
| 1.27202 |
Uwaga: wszystkie zbieżności do mianownika 99 włącznie.
Ogólnie rzecz biorąc, im większy mianownik ułamka wymiernego, tym lepsze przybliżenie. Można również wykazać, że obcięcie ułamka łańcuchowego daje ułamek wymierny, który jest najlepszym przybliżeniem pierwiastka dowolnego ułamka z mianownikiem mniejszym lub równym mianownikowi tego ułamka - np. brak ułamka z mianownikiem mniejszym lub równym 99 jest równie dobrym przybliżeniem √ 2 jako 140/99.
Metoda sekwencji Lucas
sekwencja Lucas pierwszego rodzaju U N ( P , P ) jest określone przez równanie rekurencyjne :
a jego charakterystyczne równanie to:
ma wyróżnik i korzenie:
wszystko to daje następującą wartość dodatnią:
więc kiedy chcemy , możemy wybrać i , a następnie obliczyć używając i dla dużej wartości . Najbardziej efektywnym sposobem obliczenia i jest:
Streszczenie:
wtedy kiedy :
Przybliżenia zależne od reprezentacji zmiennoprzecinkowej
Pewna liczba jest reprezentowana w zmiennoprzecinkowej formacie który jest nazywany również notacja naukowa . Jego pierwiastek kwadratowy to i podobne formuły miałyby zastosowanie do pierwiastków sześciennych i logarytmów. Na pierwszy rzut oka nie jest to poprawa prostoty, ale przypuśćmy, że potrzebne jest tylko przybliżenie: wtedy jest po prostu dobre do rzędu wielkości. Następnie rozpoznaj, że niektóre potęgi, p , będą nieparzyste, więc dla 3141,59 = 3,14159 × 10 3 zamiast zajmować się potęgami ułamkowymi podstawy, pomnóż mantysę przez podstawę i odejmij jeden od potęgi, aby uczynić ją parzystą. Doprowadzona reprezentacja będzie równowartość 31.4159 x 10 2 tak, że pierwiastek będzie √ 31,4159 × 10 1 .
Jeśli weźmie się część całkowitą skorygowanej mantysy, mogą istnieć tylko wartości od 1 do 99, które mogą być użyte jako indeks do tabeli 99 wstępnie obliczonych pierwiastków kwadratowych, aby zakończyć oszacowanie. Komputer o podstawie szesnastej wymagałby większej tabeli, ale komputer o podstawie dwa wymagałby tylko trzech wpisów: możliwe bity części całkowitej dostosowanej mantysy to 01 (moc jest taka, że nie było przesunięcia, pamiętając, że znormalizowana liczba zmiennoprzecinkowa zawsze ma niezerową cyfrę wyższego rzędu) lub jeśli potęga była nieparzysta, 10 lub 11, są to pierwsze dwa bity oryginalnej mantysy. Zatem 6,25 = 110,01 w systemie binarnym, znormalizowane do 1,1001 × 2 2, czyli potęga parzysta, więc sparowane bity mantysy to 01, podczas gdy 0,625 = 0,101 w systemie binarnym normalizuje się do 1,01 × 2 -1 potęgi nieparzystej, więc korekta wynosi 10,1 × 2 -2, a bity sparowane to 10. Zauważ, że bit niskiego rzędu mocy jest odbijany echem w bicie wyższego rzędu mantysy par. Parzysta moc ma swój najniższy bit zero, a dostosowana mantysa zacznie się od 0, podczas gdy dla nieparzystej mocy ten bit to jeden, a dostosowana mantysa zacznie się od 1. Tak więc, gdy moc jest zmniejszona o połowę, wygląda to tak, jakby jej Bit niższego rzędu jest przesuwany, aby stać się pierwszym bitem mantysy parami.
Tabela z tylko trzema wpisami mogła zostać powiększona przez dodanie dodatkowych kawałków mantysy. Jednak w przypadku komputerów, zamiast obliczać interpolację do tabeli, często lepiej jest znaleźć prostsze obliczenia dające równoważne wyniki. Wszystko teraz zależy od dokładnych szczegółów formatu reprezentacji oraz od tego, jakie operacje są dostępne, aby uzyskać dostęp do części liczby i manipulować nimi. Na przykład Fortran oferuje EXPONENT(x)funkcję uzyskania mocy. Wysiłek włożony w opracowanie dobrego przybliżenia początkowego powinien zostać zrekompensowany przez uniknięcie w ten sposób dodatkowych iteracji procesu rozdrabniania, które byłyby potrzebne dla słabego przybliżenia. Ponieważ jest ich niewiele (jedna iteracja wymaga dzielenia, dodawania i halvingu), ograniczenie jest poważne.
Wiele komputerów podąża za reprezentacją IEEE (lub wystarczająco podobną) i można uzyskać bardzo szybkie przybliżenie do pierwiastka kwadratowego, aby rozpocząć metodę Newtona. Poniższa technika opiera się na fakcie, że format zmiennoprzecinkowy (o podstawie dwa) aproksymuje logarytm o podstawie 2. To jest
Tak więc dla 32-bitowej liczby zmiennoprzecinkowej pojedynczej precyzji w formacie IEEE (gdzie w szczególności moc ma odchylenie 127 dodane dla reprezentowanej postaci) można uzyskać przybliżony logarytm, interpretując jego binarną reprezentację jako 32-bitową liczbę całkowitą, skalowanie to przez , i usunięcie odchylenia 127, tj
Na przykład 1.0 jest reprezentowane przez liczbę szesnastkową 0x3F800000, która reprezentuje liczbę całkowitą. Używając powyższej formuły otrzymasz , zgodnie z oczekiwaniami od . W podobny sposób otrzymujesz 0,5 z 1,5 (0x3FC00000).
Aby uzyskać pierwiastek kwadratowy, podziel logarytm przez 2 i przekonwertuj wartość z powrotem. Poniższy program demonstruje tę ideę. Zauważ, że najniższy bit wykładnika jest celowo dopuszczony do propagacji do mantysy. Jednym ze sposobów uzasadnienia kroków w tym programie jest założenie, że wykładnik jest biasem i jest liczbą jawnie zapisanych bitów w mantysie, a następnie pokazanie, że
/* 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 */
}
Trzy operacje matematyczne tworzące rdzeń powyższej funkcji można wyrazić w jednym wierszu. Można dodać dodatkową regulację, aby zmniejszyć maksymalny błąd względny. Tak więc trzy operacje, nie licząc obsady, można przepisać jako
val.i = (1 << 29) + (val.i >> 1) - (1 << 22) + a;
gdzie a jest odchyleniem do dostosowania błędów aproksymacji. Na przykład przy a = 0 wyniki są dokładne dla parzystych potęg 2 (np. 1,0), ale dla innych liczb wyniki będą nieco za duże (np. 1,5 dla 2,0 zamiast 1,414... z 6% błędem). Przy a = -0x4B0D2 maksymalny błąd względny jest zminimalizowany do ±3,5%.
Jeśli aproksymacja ma być użyta do wstępnego zgadywania metody Newtona do równania , to preferowana jest forma odwrotności pokazana w następnym podrozdziale.
Odwrotność pierwiastka kwadratowego
Poniżej znajduje się wariant powyższej procedury, który można wykorzystać do obliczenia odwrotności pierwiastka kwadratowego, tj. został napisany przez Grega Walsha. Przybliżenie przesunięcia całkowitego dało błąd względny mniejszy niż 4%, a błąd spadł dalej do 0,15% przy jednej iteracji metody Newtona w następnym wierszu. W grafice komputerowej jest to bardzo wydajny sposób na normalizację wektora.
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;
}
Niektóre urządzenia VLSI implementują odwrotny pierwiastek kwadratowy przy użyciu estymacji wielomianowej drugiego stopnia, po której następuje iteracja Goldschmidta .
Kwadrat ujemny lub złożony
Jeśli S < 0, to jego główny pierwiastek kwadratowy wynosi
Jeśli S = a + bi, gdzie a i b są rzeczywiste i b ≠ 0, to jego pierwiastek kwadratowy wynosi
Można to zweryfikować, podnosząc pierwiastek do kwadratu. Tutaj
jest modułem z S . Pierwiastek kwadratowy liczby zespolonej definiuje się jako pierwiastek z nieujemną częścią rzeczywistą.
Zobacz też
Uwagi
Bibliografia
Zewnętrzne linki
- Weisstein, Eric W. "Algorytmy pierwiastka kwadratowego" . MatematykaŚwiat .
- Pierwiastki kwadratowe przez odejmowanie
- Algorytm pierwiastka całkowitoliczbowego autorstwa Andriji Radović
- Algorytmy kalkulatora osobistego I : Pierwiastki kwadratowe (William E. Egbert), Hewlett-Packard Journal (maj 1977) : strona 22
- Kalkulator do nauki pierwiastka kwadratowego
