A négyzetgyök módszerek számítási algoritmusok egy valós szám fő (vagy nem negatív) négyzetgyökeinek (általában , vagy ) hozzávetőleges értékeinek kiszámítására . Aritmetikailag ez azt jelenti, hogy ha adott egy szám , akkor az eljárás talál egy számot, amely önmagával szorozva ad . Algebrailag ez azt az eljárást jelenti, amely egy egyenlet nem negatív gyökerét keresi . Geometriailag ez egy adott területű négyzet oldalának megszerkesztését jelenti.
Minden valós számnak két gyöke van [1] . A legtöbb szám négyzetgyökének fő értéke egy végtelen decimális számjegysorozatú irracionális szám. Ennek eredményeként bármely ilyen négyzetgyök decimális ábrázolása csak közelítőleg számítható ki véges pontossággal (tizedesjegyek). Azonban még ha egy egész szám négyzetgyökét vesszük is, így az eredmény véges reprezentációt kap, a gyökszámításhoz használt eljárások egy része egyre nagyobb pontossággal csak közelítéssorozatot tud visszaadni.
A valós szám folyamatos tört ábrázolása használható decimális vagy bináris bővítés helyett, és ennek az ábrázolásnak megvan az a tulajdonsága, hogy bármely racionális szám négyzetgyökének (ami nem tökéletes négyzet) van egy periódusa, azaz a periódusos kiterjesztése hasonló ahhoz, A racionális számoknak a decimális számrendszer ismétlődő kiterjesztése van.
A legáltalánosabban elfogadott analitikai módszerek iteratívak, és két lépésből állnak: megfelelő kiindulási érték megtalálása, majd iteratív finomítása egy bizonyos leállási feltétel eléréséig. A kezdőérték tetszőleges szám lehet, de ha közelebb van a végértékhez, akkor kevesebb iterációra lesz szükség. A leghíresebb ilyen módszer, és még kényelmesebb a programozáshoz, a Newton-módszer, amely a derivált számításán alapul. Számos módszer, mint például a kézi Horner-osztás vagy sorozatbővítés, nem igényel kezdeti értéket. Egyes alkalmazásokban meg kell találni az egész szám négyzetgyököt , ami a legközelebbi egész számra kerekített négyzetgyök (ebben az esetben egy módosított eljárás is használható).
Az alkalmazott módszer attól függ, hogy az eredményt hogyan fogják használni (vagyis mennyire kell pontosnak lennie az eredménynek), és milyen eszközök állnak rendelkezésre. A módszereket nagyjából fel lehet bontani a mentálisan kivitelezhető, ceruzát és papírt igénylő módszerekre, vagy olyanokra, amelyek programként valósulnak meg és futnak számítógépen vagy más számítástechnikai eszközön. Figyelembe vehető a konvergencia sebessége (hány iterációra lesz szükség egy adott pontosság eléréséhez), az egyes műveletek (például osztás) vagy iterációk számítási bonyolultsága, valamint a hibák eloszlása (az eredmény pontossága).
A négyzetgyökök (különösen a 2 gyökér) megtalálásának eljárásai legalább az ókori Babilon (Kr. e. 17. század) óta ismertek. Az 1. századi Egyiptomból származó Heron módszere volt az első ellenőrizhető algoritmus a négyzetgyök kiszámítására. A modern analitikai módszerek az arab számok kora-reneszánsz idején történő Nyugat-Európában történő átvétele után kezdődtek . Napjainkban szinte minden számítástechnikai eszköz rendelkezik gyors és pontos négyzetgyök funkcióval, mint beépített programozási nyelvi konstrukció, könyvtárfüggvény vagy hardverutasítás, amely az alábbiakban ismertetett eljárásokon alapul.
Sok iteratív négyzetgyök algoritmushoz kezdeti véletlenszerű érték szükséges. Ennek az értéknek nullától eltérő pozitív számnak kell lennie. 1 és között kell lennie , az a szám, amelynek négyzetgyökét keressük, mivel a négyzetgyöknek ezen határokon belül kell lennie. Ha a kezdeti érték nagyon messze van a gyökértől, az algoritmusnak több iterációra lesz szüksége. Ha a (vagy -val ) kezded , akkor az extra iterációkat fog megoldani, csak hogy megkapd a gyökér sorrendjét. Ezért hasznos a gyökér durva becslése, amely lehet, hogy gyenge, de könnyen kiszámítható. Általában minél pontosabb a becslés, annál gyorsabb a konvergencia. A Newton-módszer (más néven Babilóniai vagy Heron-módszer) esetében a gyökérnél valamivel nagyobb kezdeti érték gyorsabb konvergenciát ad, mint a gyökérnél kisebb kezdeti érték.
Általánosságban elmondható, hogy a becslést egy tetszőleges intervallumon veszik figyelembe, amelyben ismert, hogy tartalmaz egy gyököt (például ). A jobb becsléshez az intervallum szűkebb korlátait vagy jobb funkcionális közelítését jelenti. Ez utóbbi általában azt jelenti, hogy magasabb rendű polinomokat használunk a közelítéshez, bár nem minden közelítés használ polinomokat. Az elterjedt becslési módszerek a skaláris, lineáris, hiperbolikus és logaritmikus. A decimális rendszert általában mentális vagy papíron történő becsléshez használják. A kettes számrendszer alkalmasabb számítógépes kiértékelésre. Értékeléskor a kitevőt és a mantisszát általában külön kezeljük.
Általában a számot exponenciális formában adjuk meg , ahol , és n egy egész szám , akkor a lehetséges négyzetgyök becslése lehet , ahol .
Skaláris becslésekA skaláris módszerek a teljes tartományt tálcákra osztják, és az egyes sávokban elért pontszámot egyetlen szám jelzi. Ha a tartományt egyetlen intervallumként kezeljük, akkor a számtani átlag (5,5) vagy a geometriai átlag () elfogadható becslés. Az abszolút és relatív becslések ezeknél a becsléseknél különböznek. Általában egyetlen szám nagyon pontatlan. Tovább A pontos becslések két vagy több intervallumra osztják a tartományt, de a skaláris becslés továbbra is nagyon durva.
Két geometriailag felosztott intervallum esetén a négyzetgyök [2] értékkel becsülhető .
Ennek a becslésnek a maximális abszolút hibája = 100, a maximális relatív hibája pedig 100% az = 1 pontban.
Például egy dekompozíció esetén a pontszám a következő lesz . 246-os abszolút hibával és közel 70%-os relatív hibával.
Lineáris becslésA legjobb becslés és standard módszer a függvény lineáris közelítése kis íven. Ha, mint fent, a kitevőt kivonjuk a számból , és az intervallumot -ra redukáljuk , akkor az ív mentén valahol szekánst vagy érintőt használhatunk a közelítéshez, de a közvetlen legkisebb négyzetek regressziója pontosabb lesz.
A legkisebb négyzetek módszerével kapott egyenes minimálisra csökkenti a becslés és a függvény értéke közötti átlagos távolságot. Az egyenlete . Az együtthatók átalakítása és kerekítése után a számítások egyszerűsítése érdekében megkapjuk
Ez a legjobb átlagos becslés , amelyet az intervallum függvényének egy lineáris közelítésével kaphatunk . A becslés maximális abszolút hibája az a=100 pontban 1,2, az S=1 és 10 pontokban a maximális relatív hibája 30% [3] .
A 10-zel való osztáshoz vonjon ki egyet a kitevőből , vagy képletesen szólva mozgassa a tizedesvesszőt egy pozícióval balra. Ennél a képletnél minden hozzáadott állandó 1 plusz egy kis növekmény kielégítő becslést ad, így nem szükséges megjegyezni a pontos számot. A közelítés (lekerekítve vagy nem kerekítve) egyetlen egyenes használatával, amely kivonja a régiót a pontosság szempontjából, legfeljebb egy helyes előjelet ad. A relatív hiba nagyobb, mint 1/2 2 , tehát kevesebb, mint 2 bitnyi információt ad. A pontosság erősen korlátozott, mivel a régió két nagyságrendet ölel fel, ami elég nagy egy ilyen becsléshez.
Lényegesen jobb becslést kaphatunk darabonkénti lineáris közelítéssel, azaz több olyan szegmens felhasználásával, amelyek közelítik az eredeti ív alpontját. Minél több szegmenst használunk, annál jobb a közelítés. Az érintők leggyakoribb használata. A kritikus pont az ív felosztása és az érintési pontok elhelyezése. Az ív y=1-ről y=100-ra való felosztásának hatékony módszere a geometriai módszer – két intervallum esetén az intervallumhatár az eredeti intervallum négyzetgyöke, 1 * 100, azaz és . Három intervallumban lesznek kockagyökök - , és , és így tovább. Két intervallum esetén ez egy nagyon kényelmes szám. Könnyű érintővonalakat szerezni az érintkezési pontokon és . Egyenleteik: és . Az egyenleteket megfordítva azt kapjuk, hogy a négyzetgyökök egyenlőek és . Akkor ehhez :
A maximális abszolút értékek az intervallumok jobb oldali határain, az a=10 és 100 pontokon vannak, és egyenlők 0,54 és 1,7. A maximális relatív hibák az intervallumok végén, az a=1, 10 és 100 pontokban jelennek meg, és egyenlők 17%. 17% vagy 0,17. 1/10-nél nagyobbak, így a módszer egy jelentős számjegynél kisebb pontosságot ad.
Hiperbolikus becslésEgyes esetekben a hiperbolikus becslés érvényes lehet, mivel a hiperbola egyben konvex görbe is, és jobban feküdhet az Y = x 2 ív mentén , mint egy egyenes. A hiperbolikus becslő számítási szempontból nehezebb, mert lebegőpontos számmal kell osztani. Egy majdnem optimális hiperbolikus közelítés az intervallum x 2 - jéhez . Az átalakulás után megkapjuk . Akkor ehhez :
A lebegőpontos osztásnak egy tizedesjegyig pontosnak kell lennie, mivel minden értékelés ezt a pontosságot adja, és az ilyen osztás gondolatban is elvégezhető. A hiperbolikus becslés átlagosan jobb, mint a skaláris vagy lineáris becslés. Maximális abszolút hibája 1,58 a 100. pontban, maximális relatív hibája 16,0% a 10. pontban. A legrosszabb esetben a=10 a pontszám 3,67. Ha 10-ről indulunk, és közvetlenül alkalmazzuk a Newton-Rapson iterációkat, akkor két iterációra van szükség, amelyek 3,66-ot eredményeznek, mielőtt elérjük a hiperbolikus becslés pontosságát. Egy tipikusabb esetben, mint a 75, a hiperbolikus becslés 8,00, és 5 Newton-Rapson iteráció szükséges 75-től kezdve, hogy pontosabb eredményt kapjunk.
Aritmetikai értékelésA darabonkénti lineáris közelítéshez hasonló, de az algebrai egyenletek helyett csak aritmetikai műveleteket használó módszer a szorzótáblát fordítva használja - az 1 és 100 közötti számok négyzetgyöke valahol 1 és 10 között van, tehát mivel tudjuk, hogy a 25 pontos négyzet (5 × 5) és a 36 egy pontos négyzet (6 × 6), akkor a 25-nél nagyobb, de 36-nál kisebb szám négyzetgyöke 5-tel kezdődik. Hasonlóképpen a többi négyzet közötti számok esetében is. Ez a módszer megadja a helyes első számjegyet, de a pontossága csak egy számjegy - a 35 négyzetgyökének első számjegye például 5, de maga a 35 gyöke majdnem egyenlő 6-tal.
Jobb, ha két négyzet közötti intervallumot kettéosztjuk. Tehát a 25 és félig 36 közötti szám gyöke (ami 30,5) 5-re, a többi 30,5-nél nagyobb szám 36-ig 6-ra [4] . Az eljárás nagyon kevés aritmetikát igényel két szorzat közepének megtalálásához a táblázatból. Itt van egy táblázat az ilyen számokról:
a | legközelebbi tér | est. |
---|---|---|
1-től 2,5-ig | 1 (= 1 2 ) | egy |
2,5-6,5 | 4 (= 2 2 ) | 2 |
6,5-12,5 | 9 (= 3 2 ) | 3 |
12,5-től 20,5-ig | 16 (= 4 2 ) | négy |
20,5-30,5 | 25 (= 5 2 ) | 5 |
30,5-42,5 | 36 (= 6 2 ) | 6 |
42,5-től 56,5-ig | 49 (= 72 ) | 7 |
56,5-72,5 | 64 (= 82 ) | nyolc |
72,5-től 90,5-ig | 81 (= 9 2 ) | 9 |
90,5 és 100 között | 100 (= 102 ) | tíz |
A végső művelet a k pontszám szorzása a tízesek hatványával, felezve úgy, hogy ,
A módszer egy jelentős számjegy pontosságot ad, mert a legjobb első számjegyre kerekít.
A módszer a legtöbb esetben a legközelebbi négyzetek közötti interpolációval 3 jelentős számjegyre bővíthető. Ha , akkor megközelítőleg egyenlő k-val plusz egy tört, amely egyenlő az a és közötti különbséggel , osztva a két négyzet különbségével:
aholA végső művelet, mint fent, az eredmény szorzása tíz hatványával osztva
A k szám a decimális számjegy, az R pedig a tizedessé alakítandó tört. A törtnek általában egy számjegye van a számlálóban és egy vagy két számjegyű a nevezőben, így a tizedesjegyre való átalakítás gondolatban is elvégezhető.
Példa: keresse meg 75. négyzetgyökét , tehát a 75, n pedig 0. A szorzótábla alapján a mantissza négyzetgyökének 8 -nak kell lennie törttel, mert az a túl nagy. Tehát k 8 , ahol a tört R decimális reprezentációja . Az R törtnek van számlálója és nevezője is. A 11/17 valamivel kisebb, mint a 12/18, ami 2/3 vagy 0,67, tehát a 0,66 jó tipp (itt nem árt tippelni, mivel a hiba kicsi). Tehát a gyökér értéke . √ 75 három jelentős számjegyhez 8,66, tehát a három jelentős számjegyhez tartozó pontszám jó. Nem minden becslés ezzel a módszerrel olyan pontos, de meglehetősen közel áll hozzá.
Ha a munkát a bináris rendszerben (mondjuk egy számítógépes processzorban) végzik el, akkor ezt a következőképpen fejezzük ki: , ahol , a négyzetgyök úgy becsülhető meg
ami a legkisebb négyzetek regressziója a 3 legjelentősebb bit felett. maximális abszolút hibája 0,0408 a =2 pontban és maximális relatív hibája 3,0% az =1 pontban. A számításokhoz a kerekített becslés kényelmes (mivel az együtthatók 2 hatványai)
[5]amelynek maximális abszolút hibája a 2. pontban 0,086, és a és pontokban a maximális relatív hibája 6,1 % .
A bináris közelítéshez Mivel a becslés 19 abszolút hibát és 5,3%-os relatív hibát ad. A relatív hiba valamivel kisebb, mint 1/2 4 , tehát a közelítés 4+ bitre pontos.
Legfeljebb 8 bites becslést kaphat, ha a táblázatban megkeresi a legjelentősebb 8 bitet , mivel a legtöbb lebegőpontos ábrázolásban a legjelentősebb bit implicit módon szerepel, és a 8 bit utáni legkisebb jelentőségű biteket kerekíteni kell. A táblázat 256 bájt előre kiszámított 8 bites négyzetgyököt tartalmaz. Például az 11101101 2 indexnél, amely decimálisan 1,8515625 10, a táblázatban szereplő érték 10101110 2 , ami 1,359375 10 decimálisban , az 1,8515625 jel négyzetgyöke (10-8 bites előjel).
Talán az első közelítéshez használt algoritmus a babiloni módszerként ismert módszer , bár a hipotetikus következtetésen kívül nincs közvetlen bizonyíték arra, hogy a babiloni matematikusok ezt a módszert használták volna [6] . A módszert Heron-módszernek is nevezik, az első századi görög matematikus, Heron után, aki 60 éves Metrica című munkájában [7] adta meg a módszer első explicit leírását.Az alaptechnika az, hogy ha x nagyobb, mint a négyzet gyöke egy nem negatív S valós szám, akkor kisebb lesz a gyök és fordítva. Ezért indokolt azt várni, hogy ennek a két számnak az átlaga közelebb legyen a gyökhöz (ennek formális bizonyítása a számtani, geometriai és harmonikus átlag egyenlőtlenségén alapul , ami azt mutatja, hogy ez az átlag mindig nagyobb, mint a négyzet gyökér, amely biztosítja a konvergenciát). A módszer egyenértékű a Newton-módszer használatával az egyenlet megoldására .
Pontosabban, ha x a kezdeti tippje , és a becslésünk hibája olyan, hogy , akkor kibonthatjuk a zárójeleket, és megkapjuk
mert .Ezért kompenzálhatjuk a hibát és frissíthetjük régi becslésünket
Mivel a számított hiba nem volt pontos, ez lesz a következő közelítésünk. A frissítési folyamat addig folytatódik, amíg el nem érjük a kívánt pontosságot. Ez egy másodfokú konvergenciájú algoritmus , ami azt jelenti, hogy a közelítés helyes számjegyeinek száma (nagyjából) minden iterációval megduplázódik. Ez így működik:
Az algoritmus a következőképpen ábrázolható:
Az algoritmus p - adikus számok esetén is jól működik , de nem használható valós négyzetgyökök p - adikus négyzetgyökök azonosítására. Például megalkotható az ezzel a módszerrel kapott racionális számsorozat, amely valós számok esetén +3-hoz, 2-adikus számokban -3-hoz konvergál.
A √ S kiszámításához , ahol S = 125348, hat jelentős számjegyre, használja a fent leírt durva becslési módszert
Ezért .
Tegyük fel, hogy x 0 > 0 és S > 0. Ekkor tetszőleges n x n > 0 esetén. A relatív hiba x n :
és akkor
Most ezt meg lehet mutatni
és ebből következően
és ez garantált konvergenciát jelent, és ez a konvergencia másodfokú .
Konvergencia a legrosszabb esetbenHa durva becslési módszert használunk a babiloni módszerrel, akkor csökkenő sorrendben a pontosság legrosszabb esetei a következők:
És akkor különben is
A kerekítési hibák gyengítik a konvergenciát. Javasoljuk, hogy legalább egy plusz számjegyet tároljon a kívánt x n pontosság felett , hogy minimalizálja a kerekítési hibákat.
Ezt a négyzetgyök közelítési módszert egy ősi indiai kéziratban írták, amelyet Bakhshali-kéziratnak neveztek . A módszer ekvivalens a babiloni módszer két iterációjával x 0 kezdeti értékkel . Így az algoritmus kvadratikusan konvergens, ami azt jelenti, hogy a közelítés érvényes előjeleinek száma minden iterációval körülbelül négyszeresére nő [8] . Az algoritmus modern jelöléssel való ábrázolása a következő: Számítsa ki , legyen x 0 2 az S gyök kezdeti közelítése . Az iterációkat szekvenciálisan hajtják végre
Ezzel fel lehet építeni egy racionális közelítést a négyzetgyökhöz, egész számmal kezdve. Ha egy S -hez közeli egész számot választunk, és az a különbség, amelynek abszolút értékét minimalizáljuk, akkor az első iteráció a következőképpen írható fel:
Bakhshali módszere általánosítható tetszőleges gyök kiszámítására, beleértve a törtgyököket is [9] .
Használjuk ugyanazt a példát, amelyet a babiloni módszerre adtunk. Legyen Akkor az első iteráció megadja
Hasonlóképpen a második iteráció is megadja
Ez egy módszer a négyzetgyök egyes számjegyeinek szekvenciális megkeresésére. A módszer lassabb, mint a babiloni, de van néhány előnye
A Napier botjai további lehetőségeket tartalmaznak ennek az algoritmusnak a végrehajtásához. Az n-edik gyökér számjegyenkénti kiszámítására szolgáló algoritmus ennek a módszernek az általánosítása.
Tekintsük először azt az esetet, amikor egy Z szám négyzetgyökét találjuk meg , amely egy XY kétjegyű szám négyzete , ahol X a tízes számjegy, Y pedig az egyes számjegy. Nekünk van:
Először is határozzuk meg X értékét . X a legnagyobb számjegy, amelynél az X 2 nem haladja meg a Z -t, amelyből az utolsó két számjegy kimarad.
A következő iterációban úgy kötünk össze egy számpárt, hogy megszorozzuk X -et 2-vel, és az eredményt tízes helyzetbe tesszük, majd megpróbáljuk kideríteni, hogy Y mennyivel egyenlő .
Mivel esetünkben a válasz a pontos négyzetgyök, az algoritmus leáll.
Ugyanez az ötlet kiterjeszthető tetszőleges négyzetgyök kiszámítására. Képzeljük el, hogy N négyzetgyökét n pozitív szám összegeként találhatjuk meg úgy, hogy
Az identitás újrafelhasználásával
a jobb oldalt úgy ábrázolhatjuk
Ez a kifejezés lehetővé teszi a négyzetgyök meghatározását az értékek egymást követő kiválasztásával . Tegyük fel, hogy a számok már ki vannak választva, akkor az m-edik tagot adja meg , ahol a négyzetgyök talált közelítése. Most minden új kijelölésnek meg kell felelnie a rekurziónak
tehát mindenre a kezdeti értéknél Ha a pontos négyzetgyök megtalálható. Ha nem, akkor az összeg megfelelő közelítést ad a négyzetgyökhöz, és közelítési hiba lesz.
Például tizedesben van
ahol a számjegyek helyzetének mutatói és az együtthatók . A négyzetgyök kiszámításának minden m-edik lépésében egy közelítő négyzetgyök található. A nagyságrendet és az összegezhető tagokat a képletek adják meg
Mivel a helyzetjelzők páros hatványa 10, így bármelyik m-edik lépésben csak a maradék tag legmagasabb számjegypárjával kell dolgoznunk. Az alábbi szakasz ezt az eljárást szervezi.
Nyilvánvalóan hasonló módszerrel bármilyen számrendszerben ki lehet számítani a négyzetgyököt, nem feltétlenül decimálisan. Például a négyzetgyök számjegyenkénti megkeresése binárisan elég hatékony, mert az értéket a kis számjegykészletben (0,1}) keresi a rendszer. Ez gyorsabbá teszi a számítást, mivel minden lépésben az érték egyenlő vagy egyenlő azzal . Az a tény, hogy csak két lehetőség van, szintén megkönnyíti az érték kiválasztását a számítás m-edik lépésében. Ennek az az oka, hogy csak azt kell ellenőriznünk, hogy a Ha ez a feltétel teljesül, akkor a ; és ha nem, akkor azt is vesszük, hogy a 2-vel való szorzás balra tolással történik, segít a számításokban.
Írjuk fel az eredeti számot decimális formában. A számokat az osztáshoz hasonlóan egy hosszú osztási algoritmussal írjuk fel , és a hosszú osztáshoz hasonlóan a négyzetgyök a felső sorba kerül. Most bontsuk párokra a számokat, vesszővel kezdve, mindkét oldalán. A négyzetgyök tizedespontja a négyzet tizedespontján lesz. Egy négyzetgyök számjegyet írunk egy négyzetgyök számjegypárra.
A bal szélső pozícióból kiindulva minden egyes számpárnál a következő eljárást hajtjuk végre:
Keresse meg a 152,2756 négyzetgyökét.
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 év = (20+x)*x = 22*2 = 44 08 27 243*3 <= 827 < 244*4 x = 3 07 29 év = (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 leáll: Válasz 12.34Ez a szakasz a Számjegyenkénti számítás szakasz formalizmusát használja , kisebb módosításokkal, hogy , és mindegyik egyenlő vagy .
Most végigfuttatjuk az összeset lefelétől , és hozzávetőleges megoldást készítünk mindazok összegeként, amelyeknek értéket találunk. Annak meghatározásához, hogy
egyenlő-e vagy egyenlő -e , vesszük . Ha (vagyis a közelítésünk négyzete beleértve nem haladja meg az eredeti négyzetet), akkor beállítjuk , ellenkező esetben és .
Az egyes lépéseknél a négyzetesítés elkerülése érdekében eltároljuk a különbséget , és minden iterációnál frissítjük a c beállításával .
Kezdetben a legnagyobbat állítottuk be a -val .
Kiegészítő optimalizálásként a és , két tagot tárolunk abban az esetben, ha nem nulla, külön változókban , :
és minden lépésben hatékonyan frissíthető:
vegye észre, az
, ami az alábbi függvény által visszaadott végeredmény.Az algoritmus implementációja C nyelven [10] :
int32_t isqrt(int32_tn) { assert(("a bemeneti érték nem lehet negatív", n > 0)); int32_t x = n; // int32_t c = 0; // // négy <= n legnagyobb hatványával kezdődik int32_t d = 1 << 30; // A második legjelentősebb bitet állítsa 1-re. // Ugyanaz, mint ((előjel nélküli)INT32_MAX + 1) / 2. míg (d > n) d >>= 2; while (d != 0) // for { if (x >= c + d) // if , akkor { x -= c + d; // c = (c >> 1) + d; // } más c >>= 1; // d >>= 2; // } vissza c; // }Gyorsabb algoritmus valósítható meg bináris és decimális jelölésben is, ha táblákat használunk a kijelöléshez, vagyis a több memóriahasználat elvének megvalósítása csökkenti a végrehajtási időt [11] .
A zsebszámológépek általában jó exponenciális és természetes logaritmus programokat valósítanak meg . Ezután az S négyzetgyök kiszámítása a logaritmusok ( ) és az exponenciálisok ( ) tulajdonságainak felhasználásával történik:
A tört nevezője az n- edik gyökérnek felel meg. Esetünkben a nevező 2. Ugyanezt az azonosságot használjuk a négyzetgyök kiszámításához logaritmustáblázatok vagy diaszabályok segítségével .
Ez a módszer a négyzetgyökének meghatározására alkalmazható, és a legjobban konvergál . Ez azonban nem jelent jelentős korlátot a számítógépes számítások számára, mivel a bináris számok lebegőpontos és fixpontos ábrázolásánál triviális 4 egész hatványával megszorozni, majd változtatással a 2 kívánt hatványára korrigálni. a kitevőt vagy eltolást, ill. Így belül eltolható . Sőt, az alábbi módszer nem általános osztást használ, hanem csak összeadást, kivonást, szorzást és kettő hatványával való osztást. Ezen műveletek közül az utolsót triviálisan hajtják végre. A módszer hátránya a hibahalmozódás, ellentétben az egyváltozós iteratív módszerekkel, mint például a babilóniai.
A módszer kezdeti lépése
Iteratív lépések
Ezután (for ).
Vegyük észre, hogy a konvergencia , és ezért , másodfokú.
A módszer bizonyítása meglehetősen egyszerű. Először átírjuk az iteratív definíciót így
.Nos, ez bebizonyosodott
és ezért a kívánt eredményhez való konvergenciát a 0-hoz való konvergencia biztosítja, ami viszont abból következik .
Ezt a módszert 1950 körül fejlesztette ki M. W. Wilks , D. J. Wheeler és S. Gill [12] az EDSAC -ban, az egyik első elektronikus számítógépben [13] való használatra . Később a módszert általánosították a nem négyzetgyökökre [14] .
A következőkben iteratív módszereket mutatunk be S négyzetgyökének reciproka kiszámítására , azaz . Ha ilyen értéket találunk, akkor egyszerűen megszorozzuk: . Ezek az iterációk csak szorzást használnak, osztást nem. Mert a módszerek gyorsabbak a babiloni módszernél . A metódusok azonban instabilok, ha a kezdeti érték nincs közel a gyökérték reciprokájához, az iterációk eltérnek. Ezért előnyös lehet a babilóniai módszerrel iterálni a gyökér durva becsléséhez, mielőtt elkezdené ezeket a módszereket használni.
Egyes számítógépek a Goldschmidt algoritmust használják a számításokhoz és egyidejűleg . A Goldschmidt-algoritmus gyorsabban talál, mint a Newton-Rapson iteráció azokon a számítógépeken, amelyek megosztott szorzás-összeadás műveletekkel rendelkeznek , és vagy egy csővezetékes lebegőpontos processzorral vagy két független lebegőpontos processzorral [15] .
A Goldschmidt-algoritmus írásának első módja a következővel kezdődik
(általában táblázatkeresést használnak)és iterációkat hajtanak végre
amíg elég közel nem ér 1-hez, vagy fix számú iterációt nem hajtottak végre. Az iterációk konvergálnak
, .Vegye figyelembe, hogy elhagyhatja a vagy a számítását , és ha mindkettőt kívánja, használhatja a végén, ahelyett, hogy minden iterációnál kiértékelné.
A második módszer, amely a kombinált szorzás-összeadás műveleteket használja, azzal kezdődik
(általában táblázatkeresést használnak)és iterációkat hajtanak végre
amíg elég közel nem kerül a 0-hoz, vagy fix számú iterációt hajtanak végre. Az értékek konvergálnak
.Ha N egy közelítés , akkor a legjobb közelítés a négyzetgyök függvény Taylor-sorával érhető el :
A konvergencia sorrendje megegyezik a sorozatban használt kifejezések számával. Ha két kifejezést használunk, a módszer egyenértékű a babiloni módszerrel . Ha három kifejezést használunk, minden iteráció csaknem annyi műveletet használ, mint a Bakhshali-közelítés , de a konvergencia gyengébb. Ezért ez a módszer nem túl hatékony számítási módszer. A konvergencia sebességének maximalizálása érdekében N -t a lehető legkisebbre kell választani.
A másodfokú irracionalitások (a formájú számok , ahol a , b és c egész számok), és különösen az egész számok négyzetgyöke, periodikusan folytonos törtek . Néha nem az a cél, hogy megtaláljuk a négyzetgyök számértékét, hanem a tört törtté való bővítése , és így a racionális közelítése. Legyen S egy pozitív szám, amelynek gyökét meg kell találni. Legyen a kezdeti közelítés és r a maradék, akkor felírhatjuk , mivel van , így S négyzetgyökét úgy fejezhetjük ki
Ha ezt a for kifejezést alkalmazzuk a tört nevezőjére, azt kapjuk
kompakt jelölésA folyamatos törtbővítés számlálója/nevezője (lásd balra) nehezen írható le, és nehezen illeszthető be a meglévő dokumentumformázó rendszerbe. Emiatt egy speciális jelölést fejlesztettek ki a folyamatos törtek egész és periodikus részeinek tömör ábrázolására. Az egyik ilyen konvenció a lexikális "tört vonalat" használja a számláló és a nevező közötti sáv ábrázolására, amely lehetővé teszi, hogy a tört függőleges helyett vízszintesen írható:
Itt minden vízszintes vonást (törtszámban) három vonás képvisel - két függőleges és egy vízszintes, amelyek elkülönülnek a -tól .
A még tömörebb jelölésnek speciális formája van
A periodikusan folytatódó törteknél (amelyek mindegyike négyzetgyök) az ismétlődő rész csak egyszer szerepel, az ismétlődő rész fölött egy sávval:
√ 2 esetén az érték 1, tehát az ábrázolás az lesz
Ezt az utat követve megkapjuk a négyzetgyök általánosított folytonos törtjét
Az ilyen tört négyzetgyök kiszámításához az első lépés a gyök helyettesítése és a nevezők számának kiválasztása. Például kanonikus formában 1 és √ 2 esetén 1, tehát a numerikusan folytatódott tört 3 nevező esetén
2. lépés: A folytonos törtet feltekerjük, nevezőnként, hogy egy racionális törtet kapjunk, amelynek a számlálója és a nevezője egész szám. A hajtogatási folyamat ezután így néz ki (az első három nevezőt figyelembe véve):
Végül (3. lépés) elosztjuk a számlálót a racionális tört nevezőjével, hogy megkapjuk a gyökér közelítését:
három tizedesjegyre kerekítve.A √ 2 gyök valós értéke 1,41 és három jelentős számjegy. A relatív hiba 0,17%, tehát a racionális tört közel három tizedesjegyig jó. Ha több nevezőt veszünk, akkor a közelítésben következetes javulást kapunk - négy nevező törtet ad, ami majdnem 4 számjegyű pontosságot ad, stb.
Folyamatos törtek állnak rendelkezésre táblázatokban legalább kis számokhoz és jól ismert állandókhoz. Tetszőleges decimális jelölésű számok esetén az előre kiszámított értékek valószínűleg haszontalanok. Az alábbi táblázat a kis racionális törteket, amelyeket konvergenseknek nevezünk , több állandó kanonikus folytonos törtéből származik:
√ S | folytatta a lövést | ~tizedes | Megfelelő frakciók |
---|---|---|---|
√2 _ | 1,41421 | ||
√ 3 | 1,73205 | ||
√5 _ | 2,23607 | ||
√ 6 | 2,44949 | ||
√ 10 | 3,16228 | ||
1,77245 | |||
1,64872 | |||
1.27202 |
Megjegyzés: Az összes alkalmazható tört a 99-es nevezőig szerepel.
Általában minél nagyobb egy racionális tört nevezője, annál jobb a közelítés. Kimutatható az is, hogy egy folytatólagos tört levágása racionális törtet eredményez, amely jobban közelíti bármely olyan tört gyökét, amelynek nevezője kisebb vagy egyenlő, mint az adott tört nevezője. Például egyetlen 70-nél kisebb nevezővel rendelkező tört sem olyan jó, mint a 99/70 , amely megközelítőleg √2 .
Az első típusú Lucas-sorozatot a rekurzív reláció határozza meg
karakterisztikus polinomja pedig az
, van diszkriminánsa és gyökerei
Mindez a következő pozitív értéket adja
. Tehát ha meg akarjuk kapni , kiválaszthatjuk a és -t, majd a és segítségével számolhatunk nagy értékekre . A számítás leghatékonyabb módja és −
Eredmény:
majd itt :
A szám lebegőpontos számként jelenik meg: . Ezt a jelölési formátumot exponenciális jelölésnek is nevezik . Ennek a számnak a négyzetgyöke egyenlő , és hasonló képleteket lehet bemutatni a kockagyökökhöz és a logaritmusokhoz. Ez nem egyszerűsíti a feladatot, de ha csak közelítésre van szükség, akkor ez jó becslés a mantissza sorrendjére. Továbbá megértjük, hogy p néhány hatványa páratlannak bizonyulhat, akkor ahelyett, hogy az alap törthatványaival dolgoznánk, szorozunk vele, és kivonunk egyet a fokból, így párossá válik. A finomított ábrázolást a rendszer konvertálja a -ra , így a négyzetgyök .
Ha a mantisszának csak az egész részét vesszük, az 1-től 99-ig terjedő értékeket vehet fel, és ez indexként használható egy 99 előre kiszámított gyökből álló táblázatba a becslés befejezéséhez. A hexadecimális bázist használó számítógéphez szükség lehet nagyobb táblázatra, de a 2. bázis használatakor a táblázat csak három értékből fog állni - a mantissza finomított ábrázolásának egész részének lehetséges bitjei 01 lehetnek (ha a kitevő páros, így nincs eltolás, és vegye figyelembe, hogy a normalizált szám lebegőpontjában mindig van egy nem nulla magas számjegy), vagy ha a kitevő páratlan volt, 10 vagy 11, akkor ez az eredeti mantisszának az első két bitje. Ekkor a 6,25 (= binárisban 110,01) páros hatványra normalizálódik, így a mantissza bitpár 01, míg a 0,625 (= binárisban 0,101) páratlan hatványra normalizálódik, tehát szám-konverzióra van szükség , majd a bitpárra 10 lesz. Figyeljük meg, hogy a sorrend legkevésbé szignifikáns bitje tükröződik a mantissza párokba csoportosított legjelentősebb bitjében. A páros kitevőnek a legkisebb szignifikáns bitje nulla, és a négyes mantissza nulláról kezdődik, míg a páratlan kitevőnek 1 lesz a legkisebb jelentőségű bitben, a négyes mantissza pedig 1-gyel kezdődik. Tehát ha a kitevőt felezzük, akkor a egyenértékű a kitevő legkisebb szignifikáns bitjének eltolása a páronként csoportosított mantissza első bitjére.
A három elemből álló táblázat további mantissza bitekkel bővíthető. Számítógépek esetében azonban ahelyett, hogy az interpolációt táblázatban számolnánk ki, gyakran érdemes egy egyszerűbb számítási módot keresni, amely ugyanazt az eredményt adja. Most már minden a számábrázolási formátum pontos részleteitől és azoktól a műveletektől függ, amelyek elérhetők a szám egyes részeinek lekéréséhez és a velük való munkához. Például a Fortran tartalmaz egy funkciót EXPONENT(x)a diploma megszerzésére. A jó kezdeti közelítés megszerzésére fordított erőfeszítés megtérül a finomítási folyamat további iterációinak kiküszöbölésével, amelyek rossz közelítés esetén szükségesek.
Sok számítógép követi az IEEE lebegőpontos szabványt (vagy egy meglehetősen közeli reprezentációt), és nagyon gyors négyzetgyök közelítést kaphatunk Newton módszerének kiindulópontjaként. Ennek a közelítésnek a technikája abból fakad, hogy a lebegő számformátum (kettes bázis) közelíti a 2-es bázis logaritmust.
Tehát egy 32 bites IEEE lebegőpontos számhoz (amelyben a kitevő eltolása 127 [16] ) kaphat hozzávetőleges logaritmust, ha a számot 32 bites egész számként értelmezi, megszorozza és levonva a 127 eltolást, azaz
Például a hexadecimális 1.0 szám 0x3F800000, amely egész számként ábrázolható . A fenti képlet segítségével a várt módon kapja meg a -tól . Hasonlóképpen 0,5-öt kap az 1,5-ből (=0x3FC00000).
A négyzetgyök meghatározásához osszuk el a logaritmust 2-vel, és konvertáljuk vissza az eredményt. Az alábbi program bemutatja az ötletet. Vegye figyelembe, hogy a kitevő legkevésbé jelentős bitje szándékosan mantisszává van fordítva. A program lépéseinek igazolásának egyik módja, feltételezve, hogy ez a fokszám eltolása és a mantisszában tárolt bitek száma, az, hogy bebizonyítjuk
/* Tegyük fel, hogy a lebegő szám IEEE 754 formátumú */ #include <stdint.h> float sqrt_approx ( float z ) { egyesülés { float f ; uint32_t i ; } val = { z }; /* A típus konvertálása a bitábrázolás megváltoztatása nélkül */ /* * Bizonyítsuk be, hogy * ((((val.i / 2^m) - b) / 2) + b) * 2^m = ((val.i - 2^m) / 2) + ((b + 1) / 2) * 2^m) * ahol * b = teljesítményeltolás * m = bitek száma mantisszában */ val . i -= 1 << 23 ; /* Levonás 2^m. */ val . i >>= 1 ; /* Oszd 2-vel. */ val . i += 1 << 29 ; /* Hozzáadás ((b + 1) / 2) * 2^m. */ return val . f ; /* Újra lebegésként értelmezni */ }A függvény magját képező három aritmetikai művelet egy sorban ábrázolható. A maximális relatív hiba csökkentése érdekében további finomításokat lehet hozzáadni. Így a három művelet, beleértve a valósra való redukciót, átírható így
val . i = ( 1 << 29 ) + ( érték i >> 1 ) - ( 1 << 22 ) + a ; _ahol a egy eltolás a közelítési hibák csökkentésére. Például, ha a = 0, az eredmények pontosak 2 páros hatványaira (pl. 1,0), de más számok esetén az eredmény kissé nagy lesz (pl. 1,5 2,0 helyett 1,414... 6%-os hibával). A = -0x4B0D2 esetén a maximális relatív hiba ±3,5%-ra csökken.
Ha a közelítést a Newton-módszer kezdőértékeként kell használni az egyenletben , akkor a következő részben bemutatott inverz alak előnyösebb.
Az alábbiakban bemutatjuk a fenti eljárás egy változatát, amely felhasználható a négyzetgyök inverzének kiszámításához, azaz . Ezt a változatot Greg Walsh írta. Az eltolási közelítés 4%-nál kisebb relatív hibát ad, és a hiba 0,15%-ra csökken a Newton-módszer egy iterációja után [17] . A számítógépes grafikában ez egy nagyon hatékony módja a vektorok normalizálásának.
float invSqrt ( float x ) { float xhalf = 0,5f * x ; szakszervezet { float x ; int i ; } u ; u . x = x ; u . i = 0x5f375a86 - ( u . i >> 1 ); /* A következő sor tetszőleges számú alkalommal megismételhető a pontosság növelése érdekében */ u . x = u . x * ( 1,5f - xhalf * u . x * u . x ); térj vissza . x ; }Néhány VLSI megvalósítja a négyzetgyök reciprokának meghatározását polinomiális becsléssel, majd Goldschmidt-iterációval [18] .
Ha , akkor a fő gyöke egyenlő
Ha , ahol a és b valós számok és , akkor a fő gyöke egyenlő
Ez a [19] [20] négyzetre emelésével ellenőrizhető . Itt
az S szám modulusa . Egy komplex szám főgyöke nem negatív valós résszel rendelkező gyökként van definiálva.