Metody druhé odmocniny jsou výpočetní algoritmy pro výpočet přibližných hodnot hlavních (nebo nezáporných) odmocnin (obvykle označovaných jako , nebo ) reálného čísla. Aritmeticky to znamená, že pokud je zadáno číslo , procedura najde číslo, které po vynásobení samo sebou dává . Algebraicky to znamená postup hledání nezáporného kořene rovnice . Geometricky to znamená sestrojit stranu čtverce s danou plochou.
Každé reálné číslo má dva kořeny [1] . Hlavní hodnotou druhé odmocniny většiny čísel je iracionální číslo s nekonečnou posloupností desetinných číslic. V důsledku toho lze desetinnou reprezentaci jakékoli takové odmocniny vypočítat pouze přibližně s konečnou přesností (desetinná místa). I když však vezmeme druhou odmocninu z celého čísla, takže výsledek má konečnou reprezentaci, některé procedury používané k výpočtu odmocniny mohou vracet pouze řadu aproximací s rostoucí přesností.
Reprezentaci pokračovacího zlomku reálného čísla lze použít místo desetinného nebo binárního rozvoje a tato reprezentace má tu vlastnost, že druhá odmocnina jakéhokoli racionálního čísla (které není dokonalým čtvercem) má periodu, tj. periodický rozvoj podobný tomu, racionální čísla mají opakovaný rozvoj desítkové číselné soustavy.
Nejběžněji přijímané analytické metody jsou iterativní a sestávají ze dvou kroků: nalezení vhodné výchozí hodnoty a následného iterativního zpřesňování, dokud není dosaženo určitého zastavovacího kritéria. Počáteční hodnota může být libovolné číslo, ale pokud je blíže koncové hodnotě, bude potřeba méně iterací. Nejznámější takovou metodou a pro programování ještě pohodlnější je Newtonova metoda, která je založena na výpočtu derivace. Několik metod, jako je ruční dělení podle Hornera nebo rozšíření série, nevyžaduje počáteční hodnotu. V některých aplikacích je nutné najít celou odmocninu , což je druhá odmocnina zaokrouhlená na nejbližší celé číslo (v tomto případě lze použít upravený postup).
Použitá metoda závisí na tom, jak bude výsledek použit (tedy jak přesný musí být výsledek) a jaké nástroje jsou k dispozici. Metody lze zhruba rozdělit na ty, které lze provádět mentálně, které vyžadují tužku a papír, nebo ty, které jsou implementovány jako program a běží na počítačích nebo jiných výpočetních zařízeních. Zohlednit lze rychlost konvergence (kolik iterací bude potřeba k dosažení dané přesnosti), výpočetní náročnost jednotlivých operací (např. dělení) či iterací a rozložení chyb (přesnost výsledku).
Postupy hledání druhých odmocnin (zejména odmocniny 2) jsou známy přinejmenším od doby starověkého Babylonu (17. století př. n. l.). Heronova metoda z Egypta 1. století byla prvním ověřitelným algoritmem pro výpočet druhé odmocniny. Moderní analytické metody se začaly vyvíjet po přijetí arabských číslic v západní Evropě v rané renesanci . V dnešní době mají téměř všechna výpočetní zařízení rychlou a přesnou funkci druhé odmocniny jako vestavěný konstrukt programovacího jazyka, knihovní funkce nebo hardwarové prohlášení, které je založeno na níže popsaných postupech.
Mnoho iterativních algoritmů druhé odmocniny vyžaduje počáteční náhodnou hodnotu. Tato hodnota musí být kladné nenulové číslo. Musí být mezi 1 a , číslem, jehož druhou odmocninu hledáme, protože druhá odmocnina musí být v těchto mezích. Pokud je počáteční hodnota velmi daleko od kořenové složky, bude algoritmus potřebovat více iterací. Pokud začnete s (nebo s ), bude to fungovat o dalších iteracích, jen abyste získali pořadí kořene. Proto je užitečné mít hrubý odhad kořene, který může mít špatnou přesnost, ale lze jej snadno vypočítat. Obecně platí, že čím přesnější odhad, tím rychlejší konvergence. U Newtonovy metody (také nazývané Babylonská nebo Heronova metoda) počáteční hodnota o něco větší než odmocnina poskytuje rychlejší konvergenci než počáteční hodnota menší než odmocnina.
Obecně řečeno, odhad je uvažován na libovolném intervalu, ve kterém je známo, že obsahuje kořen (například ). Získání lepšího odhadu zahrnuje buď získání užších mezí na intervalu nebo lepší funkční aproximaci k . To druhé obvykle znamená použití polynomů vyššího řádu pro aproximaci, i když ne všechny aproximace používají polynomy. Běžné metody odhadu jsou skalární, lineární, hyperbolické a logaritmické. Desítková soustava se obvykle používá pro odhad mentálně nebo na papíře. Binární číselná soustava je vhodnější pro počítačová vyhodnocení. Při hodnocení se exponent a mantisa obvykle řeší odděleně.
Obvykle je číslo vyjádřeno v exponenciálním tvaru jako , kde , a n je celé číslo, pak odhad možné druhé odmocniny může být , kde .
Skalární odhadySkalární metody rozdělují celý rozsah do přihrádek a skóre v každé přihrádce je reprezentováno jediným číslem. Pokud je rozsah považován za jeden interval, pak jsou přijatelné odhady aritmetický průměr (5,5) nebo geometrický průměr (). Absolutní a relativní odhady pro tyto odhady se budou lišit. Obecně platí, že jedno číslo bude velmi nepřesné. Více přesné odhady rozdělují rozsah do dvou a více intervalů, ale skalární odhad je i nadále velmi hrubý.
Pro dva intervaly rozdělené geometricky lze druhou odmocninu odhadnout jako [2] .
Tento odhad má maximální absolutní chybu v bodě = 100 a maximální relativní chybu 100 % v bodě = 1.
Například u rozkladu bude skóre . , s absolutní chybou 246 a relativní chybou téměř 70 %.
Lineární odhadNejlepší odhad a standardní metoda je lineární aproximace funkce na malém oblouku. Pokud, jak je uvedeno výše, je exponent extrahován z čísla a interval je redukován na , můžete použít sečnu nebo tečnu někde podél oblouku k aproximaci, ale přímá regrese nejmenších čtverců bude přesnější.
Přímka získaná metodou nejmenších čtverců minimalizuje průměrnou vzdálenost mezi odhadem a hodnotou funkce. Její rovnice je . Po transformaci a zaokrouhlení koeficientů pro zjednodušení výpočtů získáme
Toto je nejlepší průměrný odhad , který lze získat jedním pokusem o lineární aproximaci funkce v intervalu . Odhad má maximální absolutní chybu 1,2 v bodě a=100 a maximální relativní chybu 30 % v bodech S=1 a 10 [3] .
Pro dělení 10 odečtěte jedničku od exponentu nebo, obrazně řečeno, posuňte desetinnou čárku o jednu pozici doleva. Pro tento vzorec jakákoli přidaná konstanta rovna 1 plus malý přírůstek poskytuje uspokojivý odhad, takže není potřeba si zapamatovat přesné číslo. Aproximace (zaokrouhlená nebo nezaokrouhlená) pomocí jedné přímky, která odečte oblast z hlediska přesnosti, nedává více než jedno správné znaménko. Relativní chyba je větší než 1/2 2 , takže poskytuje méně než 2 bity informace. Přesnost je značně omezená, protože oblast zabírá dva řády, což je pro tento druh odhadu poměrně velké.
Výrazně lepší odhad lze získat pomocí dílčí lineární aproximace, tj. pomocí několika segmentů, které aproximují dílčí oblouk původního oblouku. Čím více segmentů je použito, tím lepší je aproximace. Nejběžnější použití tečen. Kritickým bodem je, jak rozdělit oblouk a kam umístit dotykové body. Efektivní metoda dělení oblouku od y=1 do y=100 je geometrická - pro dva intervaly je hranicí intervalu druhá odmocnina původního intervalu, 1 * 100, tedy a . Pro tři intervaly budou krychlové odmocniny - , a , a tak dále. Pro dva intervaly je to velmi výhodné číslo. Je snadné získat tečné čáry v bodech dotyku a . Jejich rovnice jsou: a . Obrácením rovnic dostaneme, že odmocniny se rovnají a . Potom pro :
Maximální absolutní hodnoty jsou v pravých hranicích intervalů, v bodech a=10 a 100, a jsou rovny 0,54 a 1,7. Maximální relativní chyby se objevují na koncích intervalů, v bodech a=1, 10 a 100, a jsou rovny 17 %. 17 % nebo 0,17. Jsou větší než 1/10, takže metoda dává přesnost menší než jedna platná číslice.
Hyperbolický odhadV některých případech může být hyperbolický odhad platný, protože hyperbola je také konvexní křivka a může ležet podél oblouku Y = x 2 lépe než přímka. Hyperbolický odhad je výpočetně obtížnější, protože vyžaduje dělení číslem s plovoucí desetinnou čárkou. Téměř optimální hyperbolická aproximace k x 2 na intervalu je . Po transformaci dostaneme . Potom pro :
Dělení s plovoucí desetinnou čárkou musí být přesné na jedno desetinné místo, protože všechna hodnocení tuto přesnost poskytují a takové rozdělení lze provést mentálně. Hyperbolický odhad je v průměru lepší než skalární nebo lineární odhad. Jeho maximální absolutní chyba je 1,58 v bodě 100 a jeho maximální relativní chyba je 16,0 % v bodě 10. Pro nejhorší případ a=10 je skóre 3,67. Pokud začneme na 10 a použijeme přímo Newton-Rapsonovy iterace, trvá to dvě iterace, které dávají 3,66, než dosáhneme přesnosti hyperbolického odhadu. Pro typičtější případ, jako je 75, je hyperbolický odhad 8,00 a k získání přesnějšího výsledku je potřeba 5 iterací Newton-Rapson počínaje 75.
Aritmetické vyhodnoceníMetoda podobná po částech lineární aproximace, ale používající pouze aritmetické operace místo algebraických rovnic, používá tabulku násobení obráceně - druhá odmocnina čísel mezi 1 a 100 je někde mezi 1 a 10, takže protože víme, že 25 je přesná čtverec (5 × 5) a 36 je přesný čtverec (6 × 6), pak druhá odmocnina čísla, které je větší než 25, ale menší než 36, začíná číslem 5. Podobně pro čísla mezi ostatními čtverci. Tato metoda dává správnou první číslici, ale její přesnost je pouze jedna číslice - první číslice odmocniny z 35 je například 5, ale samotná odmocnina z 35 je téměř rovna 6.
Je lepší rozdělit interval mezi dvěma čtverci na polovinu. Takže odmocnina libovolného čísla mezi 25 a polovinou cesty do 36 (což je 30,5) se vyhodnotí jako 5, ostatní čísla větší než 30,5 až do 36 se vyhodnotí jako 6 [4] . Postup vyžaduje velmi málo aritmetiky k nalezení středu dvou produktů z tabulky. Zde je tabulka takových čísel:
A | nejbližší náměstí | odhad |
---|---|---|
1 až 2,5 | 1 (= 1 2 ) | jeden |
2,5 až 6,5 | 4 (= 2 2 ) | 2 |
6.5 až 12.5 | 9 (= 3 2 ) | 3 |
12.5 až 20.5 | 16 (= 4 2 ) | čtyři |
20.5 až 30.5 | 25 (= 5 2 ) | 5 |
30,5 až 42,5 | 36 (= 6 2 ) | 6 |
42,5 až 56,5 | 49 (= 72 ) | 7 |
56,5 až 72,5 | 64 (= 82 ) | osm |
72,5 až 90,5 | 81 (= 9 2 ) | 9 |
90,5 až 100 | 100 (= 102 ) | deset |
Poslední operací bude vynásobení skóre k mocninou desítek dělených napůl, takže pro ,
Metoda poskytuje přesnost na jednu platnou číslici, protože zaokrouhluje na nejlepší první číslici.
Metodu lze ve většině případů rozšířit na 3 platné číslice interpolací mezi nejbližšími čtverci. Jestliže , pak je přibližně rovno k plus zlomek rovný rozdílu mezi a a dělený rozdílem mezi dvěma čtverci:
kdeKonečná operace, jak je uvedeno výše, je vynásobení výsledku mocninou deseti děleno napůl
Číslo k je desetinná číslice a R je zlomek, který se má převést na desetinné číslo. Zlomek má obvykle jednu číslici v čitateli a jednu nebo dvě číslice ve jmenovateli, takže převod na desetinu lze provést mentálně.
Příklad: najděte druhou odmocninu z 75. , takže a je 75 a n je 0. Na základě násobilky by druhá odmocnina mantisy měla být 8 se zlomkem , protože , a , je příliš velké. Takže k je 8 , přičemž zlomek je desetinnou reprezentací R . Zlomek R má jak čitatele, tak i jmenovatele. 11/17 je o něco menší než 12/18, což je 2/3 nebo 0,67, takže 0,66 je dobrý odhad (zde je v pořádku odhadnout, protože chyba je malá). Hodnota kořene je tedy . √ 75 až tři platná čísla by byla 8,66, takže skóre na tři platná čísla je dobré. Ne všechny odhady využívající tuto metodu jsou tak přesné, ale jsou si docela blízké.
Když je práce vykonávána v binárním systému (řekněme v počítačovém procesoru), je vyjádřena jako , kde , druhou odmocninu lze odhadnout jako
což je regrese nejmenších čtverců přes 3 nejvýznamnější bity. má maximální absolutní chybu 0,0408 v bodě =2 a maximální relativní chybu 3,0 % v bodě =1. Pro výpočty je vhodný zaokrouhlený odhad (protože koeficienty jsou mocniny 2)
[5]který má maximální absolutní chybu 0,086 v bodě 2 a maximální relativní chybu 6,1 % v bodech a .
Pro binární aproximaci dává Od , odhad dává absolutní chybu 19 a relativní chybu 5,3 %. Relativní chyba je o něco menší než 1/2 4 , takže aproximace je přesná na 4+ bity.
Odhad pro až 8 bitů lze získat vyhledáním v tabulce pro nejvýznamnějších 8 bitů , protože nejvýznamnější bit je implicitní ve většině reprezentací s pohyblivou řádovou čárkou a nejméně významné bity po 8 bitech musí být zaokrouhleny. Tabulka obsahuje 256 bajtů předem vypočítaných 8bitových odmocnin. Například pro index 11101101 2 , což je 1,8515625 10 v desítkové soustavě , je hodnota v tabulce 10101110 2 , což je 1,359375 10 v desítkové soustavě , odmocnina z 1,8515625 bitů 10 až 10 až 10).
Snad prvním algoritmem používaným pro aproximaci je metoda známá jako babylonská metoda , ačkoli neexistuje žádný přímý důkaz, jiný než hypotetický závěr, že babylonští matematici používali tuto metodu [6] . Tato metoda je také známá jako Heronova metoda podle řeckého matematika Herona z prvního století , který poprvé explicitně popsal metodu ve své 60leté práci Metrica [7] Základní technika spočívá v tom, že pokud je x větší než čtverec odmocnina nezáporného reálného čísla S , pak bude odmocnina menší a naopak. Je tedy rozumné očekávat, že průměr těchto dvou čísel bude blíže odmocnině (formální důkaz této skutečnosti je založen na nerovnosti o aritmetickém, geometrickém a harmonickém průměru , což ukazuje, že tento průměr je vždy větší než čtverec kořen, který zajišťuje konvergenci). Metoda je ekvivalentní použití Newtonovy metody k řešení rovnice .
Přesněji, pokud x je počáteční odhad pro , a chyba v našem odhadu je taková, že , můžeme rozbalit závorky a získat
protože .Proto můžeme chybu kompenzovat a aktualizovat náš starý odhad
Protože vypočítaná chyba nebyla přesná, stane se naší další aproximací. Proces aktualizace pokračuje, dokud nedosáhneme požadované přesnosti. Jde o algoritmus s kvadratickou konvergencí , což znamená, že počet správných číslic aproximace (zhruba řečeno) se s každou iterací zdvojnásobuje. Funguje to takto:
Algoritmus může být reprezentován následovně:
Algoritmus také funguje dobře pro p - adická čísla , ale nelze jej použít k identifikaci skutečných odmocnin s p -adickými odmocninami. Lze například sestrojit posloupnost racionálních čísel získaných touto metodou, která konverguje k +3 v případě reálných čísel, ale k -3 ve 2-adických číslech.
Pro výpočet √ S , kde S = 125348, na šest platných číslic, použijte metodu hrubého odhadu popsanou výše
Proto .
Předpokládejme, že x 0 > 0 a S > 0. Potom pro libovolné n x n > 0. Relativní chyba x n je definována jako
a pak
Nyní se to dá ukázat
a následně
a to znamená zaručenou konvergenci a tato konvergence je kvadratická .
Konvergence v nejhorším případěPokud použijeme metodu hrubého odhadu s babylonskou metodou, pak nejhorší případy přesnosti v sestupném pořadí jsou:
A pak stejně
Chyby zaokrouhlování oslabují konvergenci. Doporučuje se uložit alespoň jednu číslici navíc nad požadovanou přesnost x n , aby se minimalizovaly chyby zaokrouhlování.
Tato metoda pro nalezení aproximace druhé odmocniny byla napsána ve starověkém indickém rukopisu zvaném Bakhshali manuscript . Metoda je ekvivalentní dvěma iteracím babylonské metody s počáteční hodnotou x 0 . Algoritmus je tedy kvadraticky konvergentní, což znamená, že počet platných znamének aproximace se s každou iterací zvyšuje asi čtyřikrát [8] . Reprezentace algoritmu v moderní notaci je následující: Vypočítejte , nechť x 0 2 je počáteční aproximace ke kořenu S . Iterace se provádějí postupně
To lze použít k vytvoření racionální aproximace k druhé odmocnině, počínaje celým číslem. Pokud je celé číslo vybrané blízko k S a je to rozdíl, jehož absolutní hodnota je minimalizována, pak lze první iteraci zapsat následovně:
Bakhshaliho metoda může být zobecněna pro výpočet libovolného kořene, včetně zlomkových kořenů [9] .
Použijme stejný příklad, který byl uveden pro babylonskou metodu. Nechť Pak dává první iterace
Podobně dává druhá iterace
Toto je metoda pro postupné hledání každé číslice odmocniny. Metoda je pomalejší než babylonská, ale má některé výhody
Napierovy hole obsahují další zařízení pro provádění tohoto algoritmu. Algoritmus pro výpočet n-té kořenové číslice po číslici je zobecněním této metody.
Uvažujme nejprve případ nalezení druhé odmocniny čísla Z , což je druhá mocnina dvouciferného čísla XY , kde X je desítková číslice a Y je jedna číslice. My máme:
Nejprve definujme hodnotu X . X je největší číslice taková, že X 2 nepřesahuje Z , ze které jsou poslední dvě číslice vypuštěny.
V další iteraci spojíme dvojici číslic tak, že X vynásobíme 2 a výsledek dáme na pozici desítek a pak se pokusíme zjistit, čemu se Y rovná .
Protože v našem případě je odpovědí přesná odmocnina, algoritmus se zastaví.
Stejný nápad lze rozšířit na výpočet libovolné druhé odmocniny. Představte si, že můžeme najít druhou odmocninu z N jako součet n kladných čísel takových, že
Opětovným použitím identity
pravá strana může být reprezentována jako
Tento výraz nám umožňuje najít druhou odmocninu postupným výběrem hodnot . Předpokládejme, že čísla již byla vybrána, pak je m-tý člen dán vztahem , kde je nalezená aproximace k druhé odmocnině. Nyní každý nový výběr musí vyhovovat rekurzi
takže pro všechny na počáteční hodnotě Pokud je nalezena přesná odmocnina. Pokud ne, pak součet dává vhodnou aproximaci k druhé odmocnině a bude to chyba aproximace.
Například v desítkové soustavě máme
kde jsou ukazatele polohy číslic a koeficienty . V každém m-tém kroku výpočtu druhé odmocniny je nalezena přibližná druhá odmocnina. Velikostní a sčítací členy jsou dány vzorci
Vzhledem k tomu, že indikátory polohy mají sudou mocninu 10, potřebujeme v libovolném m-tém kroku pracovat pouze s dvojicí nejvyšších číslic ve zbývajícím členu. Níže uvedená část organizuje tento postup.
Je zřejmé, že podobnou metodu lze použít k výpočtu druhé odmocniny v jakékoli číselné soustavě, ne nutně v desítkové soustavě. Například hledání druhé odmocniny číslici po číslici v binárním systému je docela efektivní, protože hodnota se hledá v malé sadě číslic {0,1}. Díky tomu je výpočet rychlejší, protože v každém kroku je hodnota rovna nebo rovna . Skutečnost, že existují pouze dvě možnosti pro , také usnadňuje výběr hodnoty v m-tém kroku výpočtu. Je to proto, že potřebujeme pouze zkontrolovat, že pro Pokud je tato podmínka splněna, vezmeme ; a pokud ne, pak bereme Také fakt, že násobení 2 se provádí posunem doleva, pomáhá ve výpočtech.
Původní číslo zapišme v desítkovém tvaru. Čísla se zapisují podobným způsobem jako dělení pomocí algoritmu dlouhého dělení a stejně jako u dlouhého dělení bude druhá odmocnina zapsána na horní řádek. Nyní rozdělme čísla do dvojic, počínaje čárkou, na obou stranách. Desetinná čárka druhé odmocniny bude na desetinné čárce druhé mocniny. Jedna odmocnina se zapisuje přes dvojici odmocnin.
Začneme úplně vlevo a pro každou dvojici číslic provedeme následující postup:
Najděte druhou odmocninu 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 Algoritmus se zastaví: Odpověď 12.34Tato sekce používá formalismus oddílu Výpočet číslice po číslici , s drobnými úpravami, že , a každá se rovná nebo .
Nyní projdeme všechny od dolů k a vytvoříme přibližné řešení jako součet všech, pro které najdeme hodnotu. Abychom určili ,
zda nebo je rovno , vezmeme . Jestliže (tj. druhá mocnina naší aproximace včetně nepřesahuje původní čtverec), pak nastavíme , jinak nastavíme a .
Abychom se vyhnuli kvadraturu v každém kroku, uložíme rozdíl a aktualizujeme ho při každé iteraci nastavením c .
Zpočátku jsme nastavili pro největší s .
Jako další optimalizaci ukládáme a , dva členy v případě, že není nula, v samostatných proměnných , :
a lze je efektivně aktualizovat v každém kroku:
všimněte si, že
, což je konečný výsledek vrácený funkcí níže.Implementace algoritmu v jazyce C [10] :
int32_t isqrt(int32_tn) { tvrdit(("vstupní hodnota musí být nezáporná", n > 0)); int32_t x = n; // int32_t c = 0; // // začíná nejvyšší mocninou čtyř <= n int32_t d = 1 << 30; // Nastaví druhý nejvýznamnější bit na 1. // Stejné jako ((bez znaménka)INT32_MAX + 1) / 2. zatímco (d > n) d >>= 2; while (d != 0) // for { if (x >= c + d) // if , then { x -= c + d; // c = (c >> 1) + d; // } jinak c >>= 1; // d >>= 2; // } návrat c; // }Je možné implementovat rychlejší algoritmus v binárním i desítkovém zápisu, pokud se pro výběr použijí tabulky, to znamená, že implementace principu použití více paměti zkracuje dobu provádění [11] .
Kapesní kalkulačky obvykle implementují dobré exponenciální a přirozené logaritmické programy . Výpočet druhé odmocniny S se pak provede pomocí vlastností logaritmů ( ) a exponenciál ( ):
Jmenovatel zlomku odpovídá n-té odmocnině. V našem případě je jmenovatelem 2. Stejná identita se používá k výpočtu druhé odmocniny pomocí tabulek logaritmů nebo logaritmických pravidel .
Tato metoda je použitelná pro nalezení druhé odmocniny z a nejlépe konverguje pro . To však není významné omezení pro výpočty na počítačích, protože v reprezentaci binárních čísel s pohyblivou řádovou čárkou a pevnou řádovou čárkou je triviální násobit celočíselnou mocninou 4 a poté opravit na požadovanou mocninu 2 změnou exponent nebo posun. Lze jej tedy posunout v rámci . Níže uvedená metoda navíc nepoužívá obecné dělení, ale pouze sčítání, odčítání, násobení a dělení mocninou dvou. Poslední z těchto akcí se provádí triviálně. Nevýhodou metody je akumulace chyb, na rozdíl od iteračních metod s jednou proměnnou jako je babylonská.
Počáteční krok metody
Iterativní kroky
Potom (pro ).
Všimněte si, že konvergence , a tedy , je kvadratická.
Důkaz metody je poměrně jednoduchý. Nejprve přepíšeme iterační definici jako
.Nyní je to přímo dokázáno
a proto konvergence k požadovanému výsledku je zajištěna konvergencí k 0, což zase vyplývá z .
Tato metoda byla vyvinuta kolem roku 1950 M. W. Wilksem , D. J. Wheelerem a S. Gillem [12] pro použití v EDSAC , jednom z prvních elektronických počítačů [13] . Později byla metoda zobecněna na neodmocniny [14] .
Následují iterační metody pro výpočet převrácené hodnoty druhé odmocniny S , tedy . Pokud se taková hodnota najde, zjistíme ji jednoduše vynásobením: . Tyto iterace používají pouze násobení a nepoužívají dělení. Protože metody jsou rychlejší než babylonská metoda . Metody jsou však nestabilní, pokud počáteční hodnota není blízká převrácené hodnotě kořenové hodnoty, iterace se rozcházejí. Proto může být výhodné nejprve iterovat babylonskou metodou pro hrubý odhad kořene, než začnete tyto metody používat.
Některé počítače používají k výpočtu a současně Goldschmidtův algoritmus . Goldschmidtův algoritmus najde rychleji než iterace Newton-Rapson na počítačích se sdílenými operacemi sčítání násobení a buď zřetězeným procesorem s pohyblivou řádovou čárkou nebo dvěma nezávislými procesory s pohyblivou řádovou čárkou [15] .
První způsob, jak napsat Goldschmidtův algoritmus, začíná
(obvykle se používá vyhledávání v tabulce)a provádějí se iterace
dokud se dostatečně neblíží 1 nebo dokud nebude proveden pevný počet iterací. Iterace konvergují k
, .Všimněte si, že můžete vynechat výpočet nebo , a pokud chcete obojí, můžete jej použít na konci namísto vyhodnocování při každé iteraci.
Druhá metoda, využívající kombinované operace násobení a sčítání , začíná s
(obvykle se používá vyhledávání v tabulce)a provádějí se iterace
dokud se dostatečně nepřiblíží k 0, nebo se provede pevný počet iterací. Hodnoty se sbližují
.Pokud je N aproximací k , nejlepší aproximaci lze nalézt pomocí Taylorovy řady funkce druhé odmocniny :
Pořadí konvergence se rovná počtu členů použitých v řadě. Při použití dvou termínů je metoda ekvivalentní babylonské metodě . Při použití tří termínů každá iterace používá téměř tolik operací jako Bakhshaliho aproximace , ale konvergence je slabší. Proto tato metoda není zvláště efektivní metodou výpočtu. Pro maximalizaci rychlosti konvergence by N mělo být zvoleno tak , aby bylo co nejmenší.
Kvadratické iracionality (čísla ve tvaru , kde a , b a c jsou celá čísla), a zejména druhé odmocniny celých čísel, mají periodické pokračování zlomků . Někdy není cílem najít číselnou hodnotu druhé odmocniny, ale rozšířit ji na pokračující zlomek , a tedy její racionální aproximaci. Nechť S je kladné číslo, jehož kořen má být nalezen. Nyní nechť a je počáteční aproximace a r je zbytek, pak můžeme napsat Protože máme , můžeme vyjádřit druhou odmocninu z S jako
Aplikováním tohoto výrazu pro na jmenovatel zlomku získáme
kompaktní notaceČitatel/jmenovatel expanze pokračovacího zlomku (viz vlevo) se obtížně zapisuje a také se obtížně vejde do stávajícího systému formátování dokumentu. Z tohoto důvodu byla vyvinuta speciální notace, která kompaktně reprezentuje celé číslo a periodické části spojitých zlomků. Jedna taková konvence používá lexikální „přerušovanou čáru“ k reprezentaci pruhu mezi čitatelem a jmenovatelem, což umožňuje, aby byl zlomek zapsán vodorovně místo svisle:
Zde je každý horizontální tah (ve zlomku) reprezentován třemi tahy - dvěma vertikálními a jedním horizontálním, které se oddělují od .
Ještě kompaktnější zápis má zvláštní podobu
U periodických pokračovacích zlomků (což jsou všechny odmocniny) je opakující se část uvedena pouze jednou s pruhem nad opakující se částí:
Pro √ 2 je hodnota 1, takže reprezentace bude
Po této cestě dostaneme zobecněný pokračovací zlomek pro druhou odmocninu
Prvním krokem při výpočtu takového zlomku pro získání druhé odmocniny je dosazení odmocniny a výběr počtu jmenovatelů. Například v kanonickém tvaru je 1 a pro √ 2 je 1, takže číselně pokračující zlomek pro 3 jmenovatele je
Krok 2. Pokračovací zlomek se sroluje, jeden jmenovatel po druhém, aby se získal racionální zlomek, jehož čitatel a jmenovatel jsou celá čísla. Proces skládání pak vypadá takto (při použití prvních tří jmenovatelů):
Nakonec (krok 3) vydělíme čitatele jmenovatelem racionálního zlomku, abychom získali aproximaci kořene:
zaokrouhleno na tři desetinná místa.Skutečná hodnota odmocniny √ 2 je 1,41 až tři platné číslice. Relativní chyba je 0,17 %, takže racionální zlomek je dobrý na téměř tři desetinná místa. Pokud vezmeme více jmenovatelů, dostaneme konzistentní zlepšení v aproximaci - čtyři jmenovatelé dávají zlomek , což dává téměř 4 číslice přesnosti atd.
Pokračující zlomky jsou k dispozici v tabulkách pro alespoň malá čísla a dobře známé konstanty. Pro libovolná čísla v desítkovém zápisu jsou předem vypočítané hodnoty s největší pravděpodobností k ničemu. Následující tabulka malých racionálních zlomků, nazývaných konvergenty , je odvozena z kanonických spojitých zlomků pro několik konstant:
√ S | pokračoval výstřel | ~desetinné | Vhodné frakce |
---|---|---|---|
√2 _ | 1,41421 | ||
√ 3 | 1,73205 | ||
√5 _ | 2,23607 | ||
√ 6 | 2,44949 | ||
√ 10 | 3,16228 | ||
1,77245 | |||
1,64872 | |||
1,27202 |
Poznámka: Všechny použitelné zlomky jsou uvedeny až do jmenovatele 99.
Obecně platí, že čím větší je jmenovatel racionálního zlomku, tím lepší je aproximace. Lze také ukázat, že odříznutí pokračování zlomku vede k racionálnímu zlomku s lepší aproximací ke kořeni kteréhokoli zlomku se jmenovatelem menším nebo rovným jmenovateli tohoto zlomku. Například žádný zlomek se jmenovatelem menším než 70 není tak dobrý jako 99/70 aproximující √2 .
Lucasova posloupnost prvního druhu je definována rekurzivní relací
a jeho charakteristickým polynomem je
, má diskriminant a kořeny
To vše dává následující kladnou hodnotu
. Pokud tedy chceme získat , můžeme si vybrat a a poté vypočítat pomocí a pro velké hodnoty . Nejúčinnější způsob výpočtu a −
Výsledek:
a poté na :
Číslo je reprezentováno jako číslo s plovoucí desetinnou čárkou jako . Tento formát zápisu se také nazývá exponenciální zápis . Druhá odmocnina tohoto čísla se rovná a podobné vzorce lze použít pro odmocniny a logaritmy. To nezjednodušuje úlohu, ale pokud je vyžadována pouze aproximace, pak je to dobrý odhad řádu mantisy. Dále chápeme, že některé mocniny p se mohou ukázat jako liché, pak místo práce se zlomkovými mocninami základu jím násobíme a odečítáme jedničku od stupně, čímž je sudá. Zpřesněná reprezentace se převede na , takže druhá odmocnina bude .
Pokud se vezme pouze celočíselná část mantisy, může nabývat hodnot od 1 do 99 a lze ji použít jako index do tabulky 99 předem vypočítaných kořenů pro dokončení odhadu. Počítač využívající hexadecimální základ může vyžadovat větší tabulku, ale při použití základu 2 bude tabulka sestávat pouze ze tří hodnot - možné bity celočíselné části upřesněné reprezentace mantisy mohou být 01 (pokud je exponent sudý, takže nedochází k posunu a všimněte si, že normalizované číslo s pohyblivou řádovou čárkou má vždy nenulovou vysokou číslici), nebo pokud byl exponent lichý, 10 nebo 11, jedná se o první dva bity původní mantisy. Poté se 6,25 (= 110,01 v binárním systému) normalizuje na sudou mocninu, takže pár bitů mantisy je 01, zatímco 0,625 (= 0,101 v binárním kódu) se normalizuje na lichou mocninu, takže je vyžadován převod čísla na , a poté dvojice bitů bude 10. Všimněte si, že nejméně významný bit řádu se odráží v nejvýznamnějším bitu mantisy seskupené do párů. Sudý exponent má nejméně významný bit nula a čtyřnásobná mantisa bude začínat na nule, zatímco lichý exponent bude mít 1 v nejméně významném bitu a čtyřnásobná mantisa bude začínat na 1. Takže když je exponent poloviční, je ekvivalentní posunutí nejméně významného bitu exponentu na první bit párově seskupené mantisy.
Stůl se třemi prvky lze rozšířit o další mantisové bity. V případě počítačů je však často lepší namísto výpočtu interpolace v tabulce hledat jednodušší způsob výpočtu, který dává stejné výsledky. Vše nyní závisí na přesných detailech formátu reprezentace čísel a na operacích, které jsou k dispozici pro získání částí čísla a práci s nimi. Například Fortran obsahuje funkci EXPONENT(x)pro získání titulu. Úsilí vynaložené na získání dobré počáteční aproximace se vyplatí eliminací dalších iterací procesu zpřesňování, které by byly vyžadovány v případě špatné aproximace.
Mnoho počítačů se řídí standardem IEEE s pohyblivou řádovou čárkou (nebo poměrně blízkou reprezentací) a jako výchozí bod pro Newtonovu metodu lze získat velmi rychlou aproximaci druhé odmocniny. Technika této aproximace vychází ze skutečnosti, že formát plovoucího čísla (základ dva) aproximuje logaritmus základu 2. To znamená,
Takže pro 32bitové číslo IEEE s plovoucí desetinnou čárkou (ve kterém má exponent offset 127 [16] ), můžete získat přibližný logaritmus interpretací čísla jako 32bitového celého čísla, vynásobením a odečtením ofsetu 127, tzn
Například číslo 1.0 v šestnáctkové soustavě je 0x3F800000, což může být reprezentováno jako při pohledu jako celé číslo. Pomocí výše uvedeného vzorce získáte podle očekávání od . Podobně získáte 0,5 z 1,5 (=0x3FC00000).
Chcete-li získat druhou odmocninu, vydělte logaritmus 2 a převeďte výsledek zpět. Níže uvedený program tuto myšlenku demonstruje. Všimněte si, že nejméně významný bit exponentu je záměrně přeložen do mantisy. Jedním ze způsobů, jak ospravedlnit kroky tohoto programu, za předpokladu, že se jedná o posun stupně a počet uložených bitů v mantise, je dokázat
/* Předpokládejme, že plovoucí číslo je ve formátu IEEE 754 */ #include <stdint.h> float sqrt_approx ( float z ) { union { float f ; uint32_t i ; } val = { z }; /* Převede typ bez změny bitové reprezentace */ /* * Dokažte, že * ((((val.i / 2^m) - b) / 2) + b) * 2^m = ((val.i - 2^m) / 2) + ((b + 1) / 2) * 2^m) * kde * b = offset výkonu * m = počet bitů v mantise */ val . i- = 1 << 23 ; /* Odečtěte 2^m. */ val . i >>= 1 ; /* Dělit 2. */ val . i += 1 << 29 ; /* Přidejte ((b + 1) / 2) * 2^m. */ vrátit val . f ; /* Znovu interpretovat jako plovoucí */ }Tři aritmetické operace, které tvoří jádro funkce, lze znázornit na jednom řádku. Pro snížení maximální relativní chyby lze přidat další upřesnění. Tyto tři operace, bez redukce na reálné, lze tedy přepsat jako
val . i = ( 1 << 29 ) + ( val . i >> 1 ) - ( 1 << 22 ) + a ;kde a je posun pro snížení aproximačních chyb. Například s a = 0 jsou výsledky přesné pro sudé mocniny 2 (např. 1,0), ale pro ostatní čísla bude výsledek poněkud velký (např. 1,5 pro 2,0 místo 1,414... s 6% chybou). Pro a = −0x4B0D2 je maximální relativní chyba snížena na ±3,5 %.
Pokud má být aproximace použita jako počáteční hodnota pro Newtonovu metodu v rovnici , pak je vhodnější inverzní tvar uvedený v další části.
Varianta výše uvedeného postupu je uvedena níže a lze ji použít k výpočtu převrácené hodnoty odmocniny, tj . Tuto variantu napsal Greg Walsh. Aproximace posunu dává relativní chybu menší než 4 % a chyba se po jedné iteraci Newtonovy metody sníží na 0,15 % [17] . V počítačové grafice je to velmi účinný způsob normalizace vektoru.
float invSqrt ( float x ) { float xhalf = 0,5f * x ; unie { plovák x ; int i ; } u ; u . x = x ; u . i = 0x5f375a86 - ( u . i >> 1 ); /* Další řádek lze opakovat libovolněkrát pro zvýšení přesnosti */ u . x = u . x * ( 1,5f - xpolovina * u . x * u . x ); vrátit u . x ; }Některé VLSI implementují nalezení reciproké hodnoty druhé odmocniny pomocí polynomiálního odhadu následovaného Goldschmidtovou iterací [18] .
Jestliže , pak jeho hlavní kořen je roven
Jestliže , kde a a b jsou reálná čísla a , pak je jeho hlavní kořen rovna
To lze zkontrolovat pomocí kvadratury [19] [20] . Tady
je modul čísla S . Hlavní odmocnina komplexního čísla je definována jako odmocnina s nezápornou reálnou částí.