Kvadratrodsmetoder er beregningsalgoritmer til at beregne de omtrentlige værdier af de vigtigste (eller ikke-negative) kvadratrødder (normalt betegnet som , eller ) af et reelt tal. Aritmetisk betyder det, at hvis et tal er givet , finder proceduren et tal, der, når det ganges med sig selv, giver . Algebraisk betyder dette proceduren til at finde en ikke-negativ rod af en ligning . Geometrisk betyder det, at man konstruerer en side af et kvadrat med et givet areal.
Ethvert reelt tal har to rødder [1] . Hovedværdien af kvadratroden af de fleste tal er et irrationelt tal med en uendelig række af decimaltal. Som et resultat kan decimalrepræsentationen af enhver sådan kvadratrod kun beregnes tilnærmelsesvis med begrænset præcision (decimaler). Men selvom vi tager kvadratroden af et heltal, så resultatet har en endelig repræsentation, kan nogle af de procedurer, der bruges til at beregne roden, kun returnere en række tilnærmelser med stigende præcision.
Den fortsatte brøkrepræsentation af et reelt tal kan bruges i stedet for decimal eller binær udvidelse, og denne repræsentation har den egenskab, at kvadratroden af ethvert rationelt tal (som ikke er et perfekt kvadrat) har en periode, dvs. en periodisk udvidelse svarende til hvordan rationelle tal har gentagne udvidelser af decimaltalsystemet.
De mest almindeligt accepterede analysemetoder er iterative og består af to trin: at finde en passende startværdi og derefter iterativt forfine indtil et bestemt stopkriterium er nået. Startværdien kan være et hvilket som helst tal, men hvis den er tættere på slutværdien, kræves der færre iterationer. Den mest berømte sådan metode, og endnu mere bekvem til programmering, er Newtons metode, som er baseret på beregningen af den afledede. Adskillige metoder, såsom manuel Horner-opdeling eller serieudvidelse, kræver ikke en startværdi. I nogle applikationer er det nødvendigt at finde heltal kvadratroden , som er kvadratroden afrundet til nærmeste heltal (i dette tilfælde kan en modificeret procedure bruges).
Den anvendte metode afhænger af, hvordan resultatet vil blive brugt (det vil sige, hvor nøjagtigt resultatet skal være), og hvilke værktøjer der er tilgængelige. Metoder kan groft opdeles i dem, der kan gøres mentalt, som kræver en blyant og papir, eller dem, der er implementeret som et program og kører på computere eller andre computerenheder. Konvergenshastigheden (hvor mange iterationer kræves for at opnå en given nøjagtighed), den beregningsmæssige kompleksitet af individuelle operationer (såsom division) eller iterationer og fordelingen af fejl (resultatets nøjagtighed) kan tages i betragtning.
Procedurer til at finde kvadratrødder (især roden af 2) har været kendt i det mindste siden det gamle Babylons tid (1600-tallet f.Kr.). Herons metode fra det 1. århundredes Egypten var den første verificerbare algoritme til at beregne kvadratroden. Moderne analytiske metoder begyndte at blive udviklet efter vedtagelsen af arabiske tal i Vesteuropa i den tidlige renæssance . I disse dage har næsten alle computerenheder en hurtig og nøjagtig kvadratrodsfunktion som en indbygget programmeringssprogkonstruktion, biblioteksfunktion eller hardwareerklæring, der er baseret på procedurerne beskrevet nedenfor.
Mange iterative kvadratrodsalgoritmer kræver en initial tilfældig værdi. Denne værdi skal være et positivt tal, der ikke er nul. Det skal være mellem 1 og , det tal, hvis kvadratrod vi leder efter, da kvadratroden skal være inden for disse grænser. Hvis startværdien er meget langt fra roden, vil algoritmen have brug for flere iterationer. Hvis du starter med (eller med ), vil det arbejde med ekstra iterationer bare for at få rækkefølgen af roden. Derfor er det nyttigt at have et groft skøn over roden, som kan have ringe nøjagtighed, men er let at beregne. Generelt gælder det, at jo mere nøjagtigt estimatet er, jo hurtigere er konvergensen. For Newtons metode (også kaldet Babylonsk eller Herons metode) giver en begyndelsesværdi lidt større end roden hurtigere konvergens end en begyndelsesværdi mindre end roden.
Generelt betragtes estimatet på et vilkårligt interval, hvor det er kendt, at det indeholder en rod (såsom ). At få et bedre skøn involverer enten at få smallere grænser for intervallet eller en bedre funktionel tilnærmelse til . Sidstnævnte betyder normalt at bruge højere ordens polynomier til tilnærmelsen, selvom ikke alle tilnærmelser bruger polynomier. Almindelige estimeringsmetoder er skalar, lineær, hyperbolsk og logaritmisk. Decimalsystemet bruges normalt til at estimere mentalt eller på papir. Det binære talsystem er mere velegnet til computerevalueringer. Ved evaluering behandles eksponenten og mantissen normalt separat.
Normalt er tallet udtrykt i eksponentiel form som , hvor , og n er et heltal, så kan et skøn over den mulige kvadratrod være , hvor .
Skalære estimaterSkalære metoder opdeler hele området i bins, og scoren i hver bin er repræsenteret af et enkelt tal. Hvis området behandles som et enkelt interval, er det aritmetiske middelværdi (5,5) eller det geometriske middelværdi () acceptable estimater. De absolutte og relative estimater for disse estimater vil afvige. Generelt vil et enkelt tal være meget unøjagtigt. Mere nøjagtige estimater opdeler området i to og flere intervaller, men det skalære skøn er fortsat meget groft.
For to intervaller, der er opdelt geometrisk, kan kvadratroden estimeres til [2] .
Dette estimat har en maksimal absolut fejl ved punkt = 100 og en maksimal relativ fejl på 100 % ved punkt = 1.
For eksempel, for med en dekomponering , vil scoren være . , med en absolut fejl på 246 og en relativ fejl på næsten 70 %.
Lineær estimeringDen bedste estimat og standardmetode er den lineære tilnærmelse af funktionen på en lille bue. Hvis eksponenten som ovenfor udtrækkes fra tallet , og intervallet reduceres til , kan du bruge en sekant eller tangent et sted langs buen til at tilnærme, men den direkte mindste kvadraters regression vil være mere præcis.
Den rette linje, opnået ved metoden med mindste kvadrater, minimerer den gennemsnitlige afstand mellem estimatet og værdien af funktionen. Hendes ligning er . Efter transformation og afrunding af koefficienterne for at forenkle beregningerne, får vi
Dette er det bedste gennemsnitsestimat , der kan opnås ved et forsøg på en lineær tilnærmelse af funktionen i intervallet . Estimatet har en maksimal absolut fejl på 1,2 ved punkt a=100 og en maksimal relativ fejl på 30 % ved punkt S=1 og 10 [3] .
For at dividere med 10 skal du trække en fra eksponenten , eller billedligt talt flytte decimaltegnet en position til venstre. For denne formel giver enhver tilføjet konstant lig med 1 plus en lille stigning et tilfredsstillende skøn, så der er ingen grund til at huske det nøjagtige tal. Approksimation (afrundet eller ikke afrundet) ved hjælp af en ret linje, der trækker området fra med hensyn til nøjagtighed, giver ikke mere end ét korrekt tegn. Den relative fejl er mere end 1/2 2 , så den giver mindre end 2 bit information. Nøjagtigheden er stærkt begrænset, da regionen spænder over to størrelsesordener, hvilket er ret stort for denne form for estimering.
Et væsentligt bedre estimat kan opnås ved at bruge en stykkevis lineær tilnærmelse, det vil sige ved at bruge flere segmenter, der tilnærmer subbuen af den oprindelige bue. Jo flere segmenter der bruges, jo bedre tilnærmelse. Den mest almindelige brug af tangenter. Det kritiske punkt er, hvordan man deler buen, og hvor man placerer berøringspunkterne. En effektiv metode til at dividere buen fra y=1 til y=100 er geometrisk - for to intervaller er intervalgrænsen kvadratroden af det oprindelige interval, 1 * 100, det vil sige og . I tre intervaller vil der være terningrødder - , og , og så videre. For to intervaller er dette et meget praktisk tal. Det er let at opnå tangentlinjer ved kontaktpunkterne og . Deres ligninger er: og . Vende ligningerne om, får vi, at kvadratrødderne er lig med og . Så for :
De maksimale absolutte værdier er i de højre grænser af intervallerne, i punkterne a=10 og 100, og er lig med henholdsvis 0,54 og 1,7. De maksimale relative fejl vises i enderne af intervallerne, i punkterne a=1, 10 og 100, og er lig med 17%. 17 % eller 0,17. De er større end 1/10, så metoden giver en nøjagtighed på mindre end et signifikant ciffer.
Hyperbolsk estimatI nogle tilfælde kan det hyperbolske estimat være gyldigt, da hyperbelen også er en konveks kurve og kan ligge langs buen Y = x 2 bedre end en ret linje. Den hyperbolske estimator er beregningsmæssigt vanskeligere, fordi den kræver division med et flydende kommatal. En næsten optimal hyperbolsk tilnærmelse til x 2 på intervallet er . Efter transformation får vi . Så for :
Floating-point-inddelingen skal være nøjagtig med én decimal, da al evaluering giver den præcision, og sådan en division kan udføres mentalt. Det hyperbolske estimat er i gennemsnit bedre end det skalære eller lineære estimat. Dens maksimale absolutte fejl er 1,58 ved punkt 100, og dens maksimale relative fejl er 16,0 % ved punkt 10. I værste tilfælde er a=10 scoren 3,67. Hvis vi starter ved 10 og anvender Newton-Rapson iterationerne direkte, tager det to iterationer, som giver 3,66, før vi når nøjagtigheden af det hyperbolske estimat. For et mere typisk tilfælde som 75 er det hyperbolske estimat 8,00, og det tager 5 Newton-Rapson-iterationer, der starter ved 75 for at få et mere præcist resultat.
Aritmetisk evalueringEn metode svarende til stykkevis lineær tilnærmelse, men kun ved at bruge aritmetiske operationer i stedet for algebraiske ligninger, bruger multiplikationstabellen omvendt - kvadratroden af tal mellem 1 og 100 er et sted mellem 1 og 10, så da vi ved, at 25 er nøjagtigt kvadrat. (5 × 5) og 36 er et nøjagtigt kvadrat (6 × 6), så begynder kvadratroden af et tal, der er større end 25, men mindre end 36, med tallet 5. Tilsvarende for tal mellem andre kvadrater. Denne metode giver det korrekte første ciffer, men dets nøjagtighed er kun et ciffer - det første ciffer af kvadratroden af 35 er for eksempel 5, men selve roden af 35 er næsten lig med 6.
Det er bedre at dele intervallet mellem to firkanter i to. Så roden af ethvert tal mellem 25 og halvvejs op til 36 (som er 30,5) evalueres til 5, andre tal større end 30,5 op til 36 evalueres til 6 [4] . Proceduren kræver meget lidt aritmetik for at finde midten af to produkter fra bordet. Her er en tabel over sådanne tal:
-en | nærmeste plads | anslået |
---|---|---|
1 til 2,5 | 1 (= 1 2 ) | en |
2,5 til 6,5 | 4 (= 2 2 ) | 2 |
6,5 til 12,5 | 9 (= 3 2 ) | 3 |
12,5 til 20,5 | 16 (= 4 2 ) | fire |
20,5 til 30,5 | 25 (= 5 2 ) | 5 |
30,5 til 42,5 | 36 (= 6 2 ) | 6 |
42,5 til 56,5 | 49 (= 72 ) | 7 |
56,5 til 72,5 | 64 (= 82 ) | otte |
72,5 til 90,5 | 81 (= 9 2 ) | 9 |
90,5 til 100 | 100 (= 102 ) | ti |
Den endelige operation vil være multiplikationen af partituren k med potensen af tiere divideret i halvdelen, således at for ,
Metoden giver et væsentligt cifferpræcision, fordi den runder af til det bedste første ciffer.
Metoden kan i de fleste tilfælde udvides til 3 signifikante cifre ved at interpolere mellem nærmeste kvadrater. Hvis , så er omtrent lig med k plus en brøk lig med forskellen mellem a og , divideret med forskellen mellem de to kvadrater:
hvorDen endelige operation, som ovenfor, er multiplikationen af resultatet med en potens af ti divideret med det halve
Tallet k er decimaltallet, og R er brøken, der skal omregnes til decimaltallet. En brøk har normalt et ciffer i tælleren og et eller to cifre i nævneren, så konvertering til en decimal kan ske mentalt.
Eksempel: find kvadratroden af 75. , så a er 75 og n er 0. Baseret på multiplikationstabellen skal kvadratroden af mantissen være 8 med en brøk , fordi , a , er for stor. Så k er 8 , hvor brøken er decimalrepræsentationen af R . Brøken R har både en tæller og en nævner. 11/17 er lidt mindre end 12/18, som er 2/3 eller 0,67, så 0,66 er et godt gæt (det er okay at gætte her, da fejlen er lille). Så værdien af roden er . √ 75 til tre signifikante cifre ville være 8,66, så en score til tre signifikante cifre er godt. Ikke alle estimater ved hjælp af denne metode er så nøjagtige, men de er ret tæt på.
Når arbejdet udføres i det binære system (f.eks. i en computerprocessor), udtrykkes det som , hvor , kvadratroden kan estimeres som
som er en mindste kvadraters regression over de 3 mest signifikante bits. har en maksimal absolut fejl på 0,0408 ved punkt =2 og en maksimal relativ fejl på 3,0 % ved punkt =1. Til beregninger er et afrundet estimat praktisk (fordi koefficienterne er potenser af 2)
[5]som har en maksimal absolut fejl på 0,086 ved punkt 2 og en maksimal relativ fejl på 6,1 % ved punkt og .
For den binære tilnærmelse giver Siden giver estimatet en absolut fejl på 19 og en relativ fejl på 5,3%. Den relative fejl er lidt mindre end 1/2 4 , så tilnærmelsen er nøjagtig til 4+ bit.
Et estimat for op til 8 bit kan opnås ved at slå op i tabellen for de mest signifikante 8 bits , givet at den mest signifikante bit er implicit i de fleste flydende komma-repræsentationer, og de mindst signifikante bits efter 8 bit skal afrundes. Tabellen indeholder 256 bytes forudberegnet 8-bit kvadratrødder. For eksempel, for indeks 11101101 2 , som er 1,8515625 10 i decimal , er værdien i tabellen 10101110 2 , hvilket er 1,359375 10 i decimal , kvadratroden af 1,8515685 bit 10 til decimaltegn (+ decimaltegn 10).
Måske er den første algoritme , der bruges til tilnærmelse , metoden kendt som den babylonske metode , selvom der ikke er nogen direkte beviser, bortset fra hypotetisk slutning, på, at babylonske matematikere brugte denne metode [6] . Metoden er også kendt som Herons metode , efter den græske matematiker fra det første århundrede Heron , som gav den første eksplicitte beskrivelse af metoden i sit 60 år lange værk Metrica [7] .Den grundlæggende teknik er, at hvis x er større end kvadratet rod af et ikke-negativt reelt tal S , så vil det være mindre rod og omvendt. Så det er rimeligt at forvente, at gennemsnittet af disse to tal er tættere på roden (det formelle bevis for dette faktum er baseret på uligheden omkring det aritmetiske, geometriske og harmoniske middelværdi , hvilket viser, at dette gennemsnit altid er større end kvadratet root, som sikrer konvergens). Metoden svarer til at bruge Newtons metode til at løse ligningen .
Mere præcist, hvis x er et indledende gæt for , og fejlen i vores estimat er sådan, at , kan vi udvide parenteserne og få
fordi .Derfor kan vi kompensere for fejlen og opdatere vores gamle skøn
Da den beregnede fejl ikke var nøjagtig, vil det blive vores næste tilnærmelse. Opdateringsprocessen fortsætter, indtil vi når den ønskede nøjagtighed. Det er en algoritme med kvadratisk konvergens , hvilket betyder, at antallet af korrekte cifre i tilnærmelsen (groft sagt) fordobles med hver iteration. Det fungerer sådan her:
Algoritmen kan repræsenteres som følger:
Algoritmen fungerer også godt for p - adiske tal , men kan ikke bruges til at identificere rigtige kvadratrødder med p - adiske kvadratrødder. Man kan for eksempel konstruere en række rationelle tal opnået ved denne metode, der konvergerer til +3 i tilfælde af reelle tal, men til -3 i 2-adiske tal.
For at beregne √ S , hvor S = 125348, til seks signifikante cifre, skal du bruge den grove estimeringsmetode beskrevet ovenfor
Derfor .
Antag, at x 0 > 0 og S > 0. Så for enhver n x n > 0. Den relative fejl x n er defineret som
og så
Det kan det nu vise sig
og følgelig
og dette indebærer garanteret konvergens, og denne konvergens er kvadratisk .
Konvergens i værste faldHvis vi bruger en grov estimeringsmetode med den babylonske metode, så er de værste tilfælde af nøjagtighed i faldende rækkefølge:
Og så alligevel
Afrundingsfejl svækker konvergensen. Det anbefales at gemme mindst et ekstra ciffer over den ønskede præcision x n for at minimere afrundingsfejl.
Denne metode til at finde kvadratrodstilnærmelsen blev skrevet i et gammelt indisk manuskript kaldet Bakhshali-manuskriptet . Metoden svarer til to iterationer af den babylonske metode med startværdi x 0 . Algoritmen er således kvadratisk konvergent, hvilket betyder, at antallet af gyldige tegn for tilnærmelsen stiger med cirka fire gange med hver iteration [8] . Repræsentationen af algoritmen i moderne notation er som følger: Beregn , lad x 0 2 være den indledende tilnærmelse til roden S . Iterationer udføres sekventielt
Dette kan bruges til at bygge en rationel tilnærmelse til kvadratroden, startende med et heltal. Hvis er et heltal valgt tæt på S og er forskellen, hvis absolutte værdi bliver minimeret, så kan den første iteration skrives som følger:
Bakhshalis metode kan generaliseres til at beregne en vilkårlig rod, herunder brøkrødder [9] .
Lad os bruge det samme eksempel, som blev givet for den babylonske metode. Lad Så giver den første iteration
På samme måde giver den anden iteration
Dette er en metode til sekventielt at finde hvert ciffer i kvadratroden. Metoden er langsommere end babylonsk, men har nogle fordele
Napiers pinde inkluderer yderligere faciliteter til at udføre denne algoritme. Algoritmen til at beregne det n'te rodciffer for ciffer er en generalisering af denne metode.
Overvej først tilfældet med at finde kvadratroden af et tal Z , som er kvadratet af et tocifret tal XY , hvor X er tier-cifferet og Y er et-tallet. Vi har:
Lad os først definere værdien af X . X er det største ciffer, således at X 2 ikke overstiger Z , hvorfra de sidste to cifre er droppet.
I den næste iteration forbinder vi et par cifre ved at gange X med 2 og sætte resultatet i tier-positionen og derefter forsøge at finde ud af, hvad Y er lig med .
Da svaret i vores tilfælde er den nøjagtige kvadratrod, stopper algoritmen.
Den samme idé kan udvides til at beregne en vilkårlig kvadratrod. Forestil dig, at vi kan finde kvadratroden af N som summen af n positive tal således
Ved at genbruge identiteten
højre side kan repræsenteres som
Dette udtryk giver os mulighed for at finde kvadratroden ved successivt valg af værdier . Antag, at tallene allerede er udvalgt, så er det m. led givet af , hvor er den fundne tilnærmelse til kvadratroden. Nu skal hver ny markering tilfredsstille rekursionen
så for alle ved startværdien Hvis den nøjagtige kvadratrod findes. Hvis ikke, så giver summen en passende tilnærmelse til kvadratroden og vil være en tilnærmelsesfejl.
For eksempel har vi i decimal
hvor er indikatorer for positionen af cifrene, og koefficienterne . Ved hvert m-te trin i beregningen af kvadratroden findes en omtrentlig kvadratrod. Størrelses- og summeringsled er givet af formlerne
Da positionsindikatorerne har en jævn styrke på 10, behøver vi kun at arbejde med parret af højeste cifre i den resterende term på ethvert månedstrin. Afsnittet nedenfor organiserer denne procedure.
Naturligvis kan en lignende metode bruges til at beregne kvadratroden i ethvert talsystem, ikke nødvendigvis i decimal. For eksempel er det ret effektivt at finde kvadratroden ciffer for ciffer i binær, fordi værdien slås op i det lille sæt af cifre {0,1}. Dette gør beregningen hurtigere, da værdien ved hvert trin enten er lig med eller lig med . At der kun er to muligheder for , gør det også nemmere at vælge en værdi på månedstrinnet i beregningen. Dette skyldes, at vi kun skal kontrollere, at for Hvis denne betingelse er opfyldt, tager vi ; og hvis ikke, så tager vi også det faktum, at multiplikation med 2 udføres ved at flytte til venstre, hjælper i beregningerne.
Lad os skrive det oprindelige tal i decimalform. Tal skrives på samme måde som divisionen med en lang divisionsalgoritme , og som i lang division vil kvadratroden blive skrevet på den øverste linje. Lad os nu opdele tallene i par, begyndende med et komma, på begge sider af det. Decimalpunktet for kvadratroden vil være på kvadratets decimalpunkt. Et kvadratrodsciffer skrives over et par kvadratrodscifre.
Startende fra den yderste venstre position udfører vi følgende procedure for hvert par cifre:
Find kvadratroden af 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 Algoritmestop: Svar 12.34Denne sektion bruger formalismen i sektionen Beregning af ciffer for ciffer , med mindre ændringer, at , og hver er lig med eller .
Nu gennemgår vi alt fra ned til og bygger en tilnærmet løsning som summen af alle , som vi finder en værdi for.
For at bestemme om eller er lig med , tager vi . Hvis (det vil sige kvadratet af vores tilnærmelse inklusive ikke overstiger det oprindelige kvadrat), så sætter vi , ellers sætter vi og .
For at undgå kvadrering ved hvert trin gemmer vi forskellen og opdaterer den ved hver iteration ved at indstille c .
I første omgang satte vi efter den største med .
Som en yderligere optimering gemmer vi og , to udtryk i tilfældet, når de ikke er nul, i separate variable , :
og kan opdateres effektivt ved hvert trin:
Læg mærke til det
, som er slutresultatet returneret af funktionen nedenfor.Implementering af algoritmen i C-sprog [10] :
int32_t isqrt(int32_tn) { assert(("inputværdi skal være ikke-negativ", n > 0)); int32_t x = n; // int32_t c = 0; // // starter med den højeste potens af fire <= n int32_t d = 1 << 30; // Indstil den næstmest signifikante bit til 1. // Samme som ((usigneret)INT32_MAX + 1) / 2. mens (d > n) d >>= 2; while (d != 0) // for { if (x >= c + d) // if , then { x -= c + d; // c = (c >> 1) + d; // } andet c >>= 1; // d >>= 2; // } retur c; // }Det er muligt at implementere en hurtigere algoritme i både binær og decimal notation, hvis tabeller bruges til udvælgelse, det vil sige, at implementeringen af princippet om at bruge mere hukommelse reducerer eksekveringstiden [11] .
Lommeregnere implementerer normalt gode eksponentielle og naturlige logaritmeprogrammer . Beregningen af kvadratroden S udføres derefter ved hjælp af egenskaberne for logaritmer ( ) og eksponentialer ( ):
Brøkens nævner svarer til den n'te rod. I vores tilfælde er nævneren 2. Den samme identitet bruges til at beregne kvadratroden ved hjælp af tabeller med logaritmer eller diasregler .
Denne metode er anvendelig til at finde kvadratroden af og konvergerer bedst for . Dette er dog ikke en væsentlig begrænsning for beregning på computere, da det i flydende- og fastpunktsrepræsentationer af binære tal er trivielt at gange med en heltalspotens på 4 og derefter korrigere til den ønskede potens af 2 ved at ændre henholdsvis eksponenten eller skiftet. Den kan således flyttes indenfor . Desuden bruger metoden nedenfor ikke generelle divisioner, men kun addition, subtraktion, multiplikation og division med en potens af to. Den sidste af disse handlinger er trivielt implementeret. Ulempen ved metoden er fejlakkumulering, i modsætning til iterative metoder med én variabel som babylonsk.
Metodens indledende trin
Iterative trin
Derefter (for ).
Bemærk, at konvergens , og derfor , er kvadratisk.
Beviset for metoden er ret simpelt. Vi omskriver først den iterative definition som
.Nu, frontalt, er det bevist det
og derfor sikres konvergensen til det ønskede resultat ved konvergensen til 0, som igen følger af .
Denne metode blev udviklet omkring 1950 af M. W. Wilks , D. J. Wheeler og S. Gill [12] til brug i EDSAC , en af de første elektroniske computere [13] . Senere blev metoden generaliseret til ikke-kvadratrødder [14] .
Følgende er iterative metoder til at beregne den reciproke af kvadratroden af S , dvs. Hvis en sådan værdi findes, finder vi den blot ved at gange: . Disse iterationer bruger kun multiplikation og bruger ikke divisioner. Fordi metoderne er hurtigere end den babylonske metode . Metoderne er dog ustabile, hvis startværdien ikke er tæt på den reciproke af rodværdien, divergerer iterationerne. Derfor kan det være en fordel først at iterere med den babylonske metode for at få et groft skøn over roden, før man begynder at bruge disse metoder.
Nogle computere bruger Goldschmidt-algoritmen til at beregne og samtidig . Goldschmidt-algoritmen finder hurtigere end Newton-Rapson-iterationen på computere med delte multiplikations-add- operationer og enten en pipelinet flydende komma-processor eller to uafhængige flydende komma-processorer [15] .
Den første måde at skrive Goldschmidt-algoritmen på starter med
(normalt bruges tabelopslag)og gentagelser udføres
indtil det er tæt nok på 1 eller et fast antal iterationer er blevet udført. Iterationerne konvergerer til
, .Bemærk, at du kan udelade beregningen af eller , og hvis begge ønskes, kan du bruge det til sidst i stedet for at evaluere ved hver iteration.
Den anden metode, der bruger de kombinerede multiplikations-additionsoperationer , starter med
(normalt bruges tabelopslag)og gentagelser udføres
indtil den kommer tæt nok på 0, eller der udføres et fast antal iterationer. Værdierne konvergerer til
.Hvis N er en tilnærmelse til , kan den bedste tilnærmelse findes ved at bruge Taylor - serien af kvadratrodsfunktionen :
Konvergensrækkefølgen er lig med antallet af termer, der bruges i serien. Når man bruger to udtryk, svarer metoden til den babylonske metode . Når du bruger tre udtryk, bruger hver iteration næsten lige så mange operationer, som Bakhshali-tilnærmelsen bruger , men konvergensen er svagere. Derfor er denne metode ikke en særlig effektiv beregningsmetode. For at maksimere konvergenshastigheden bør N vælges til at være så lille som muligt.
Kvadratiske irrationaliteter (tal af formen , hvor a , b og c er heltal), og især kvadratrødder af heltal, har periodiske fortsatte brøker . Nogle gange er målet ikke at finde den numeriske værdi af kvadratroden, men at udvide den til en fortsat brøk , og dermed dens rationelle tilnærmelse. Lad S være et positivt tal, hvis rod skal findes. Lad nu a være den indledende tilnærmelse og r være resten, så kan vi skrive Da vi har , kan vi udtrykke kvadratroden af S som
Ved at anvende dette udtryk for på nævneren af brøken får vi
kompakt notationTælleren/nævneren for den fortsatte brøkudvidelse (se venstre) er svær at skrive ned og også svær at passe ind i det eksisterende dokumentformateringssystem. Af denne grund er der udviklet en speciel notation til kompakt at repræsentere heltal og periodiske dele af fortsatte brøker. En sådan konvention bruger den leksikalske "stiplede linje" til at repræsentere stregen mellem tælleren og nævneren, hvilket gør det muligt at skrive brøken vandret i stedet for lodret:
Her er hvert vandret streg (i brøk) repræsenteret af tre streger - to lodrette og et vandret, som adskilles fra .
En endnu mere kompakt notation har en særlig form
For periodiske fortsatte brøker (som alle er kvadratrødder) er den gentagne del kun angivet én gang med en streg over den gentagne del:
For √ 2 er værdien 1, så repræsentationen bliver
Ved at følge denne vej får vi den generaliserede fortsatte brøk for kvadratroden
Det første trin i at beregne en sådan brøk for at opnå en kvadratrod er at erstatte roden og vælge antallet af nævnere. For eksempel er i kanonisk form 1 og for √ 2 er 1, så den numeriske fortsatte brøk for 3 nævnere er
Trin 2. Den fortsatte brøk rulles op, én nævner ad gangen, for at få en rationel brøk, hvis tæller og nævner er hele tal. Foldeprocessen ser derefter sådan ud (med de første tre nævnere):
Til sidst (trin 3) dividerer vi tælleren med nævneren af den rationelle brøk for at få en tilnærmelse af roden:
afrundet til tre decimaler.Den reelle værdi af roden √ 2 er 1,41 til tre signifikante cifre. Den relative fejl er 0,17 %, så en rationel brøk er god til næsten tre decimaler. Tager vi flere nævnere, får vi en konsekvent forbedring i tilnærmelsen - fire nævnere giver en brøk , hvilket giver næsten 4 cifres nøjagtighed osv.
Fortsatte brøker er tilgængelige i tabeller for mindst små tal og velkendte konstanter. For vilkårlige tal i decimalnotation er forudberegnede værdier højst sandsynligt ubrugelige. Følgende tabel over små rationelle fraktioner, kaldet konvergenter , er afledt af kanoniske fortsatte fraktioner for flere konstanter:
√S _ | fortsatte skud | ~decimal | Egnede fraktioner |
---|---|---|---|
√2 _ | 1,41421 | ||
√ 3 | 1,73205 | ||
√5 _ | 2,23607 | ||
√ 6 | 2,44949 | ||
√ 10 | 3,16228 | ||
1,77245 | |||
1,64872 | |||
1,27202 |
Bemærk: Alle relevante brøker er opført op til nævneren 99.
Generelt gælder det, at jo større nævneren af en rationel brøk er, jo bedre er tilnærmelsen. Det kan også vises, at afskæring af en fortsat brøk resulterer i en rationel brøk, med en bedre tilnærmelse til roden af enhver brøk med en nævner mindre end eller lig med den brøks nævner. For eksempel er ingen brøk med en nævner mindre end 70 så god som 99/70 , der tilnærmer √2 .
Lucas-sekvensen af den første slags er defineret af den rekursive relation
og dets karakteristiske polynomium er
, det har en diskriminant og rødder
Alt dette giver følgende positive værdi
. Så hvis vi ønsker at få , kan vi vælge og og derefter beregne ved hjælp af og for store værdier . Den mest effektive måde at beregne og −
Resultat:
og derefter kl :
Tallet er repræsenteret som et flydende kommatal som . Dette notationsformat kaldes også eksponentiel notation . Kvadratroden af dette tal er lig , og lignende formler kan præsenteres for terningrødder og logaritmer. Dette forenkler ikke opgaven, men hvis der kun kræves en tilnærmelse, så er det et godt skøn over rækkefølgen af mantissen. Yderligere forstår vi, at nogle potenser af p kan vise sig at være ulige, så i stedet for at arbejde med brøkpotenser af grundfladen, multiplicerer vi med den og trækker en fra graden, så den bliver lige. Den raffinerede repræsentation konverteres til , så kvadratroden bliver .
Hvis kun den heltallige del af mantissen tages, kan den tage værdier fra 1 til 99, og dette kan bruges som et indeks i en tabel med 99 forudberegnede rødder for at fuldende estimatet. En computer, der bruger hexadecimal base, kan kræve en større tabel, men ved brug af base 2 vil tabellen kun bestå af tre værdier - de mulige bits af heltalsdelen af den raffinerede repræsentation af mantissen kan være 01 (hvis eksponenten er lige, så der er ingen forskydning, og bemærk, at det normaliserede antal flydende komma altid har et højt ciffer, der ikke er nul), eller hvis eksponenten var ulige, 10 eller 11, er disse de første to bits af den oprindelige mantisse. Så normaliseres 6,25 (= 110,01 i binært) til en lige potens, så mantissebitparret er 01, mens 0,625 (= 0,101 i binært) normaliseres til en ulige potens, så der kræves en talkonvertering til , og derefter bitparret vil være 10. Bemærk, at den mindst signifikante bit af rækkefølgen afspejles i den mest signifikante bit af mantissen grupperet i par. En lige eksponent har den mindst signifikante bit af nul, og quad-mantissen vil starte ved nul, mens en ulige eksponent vil have et 1 i den mindst betydende bit, og quad-mantissen vil starte ved 1. Så når eksponenten er halveret, er den svarende til at flytte den mindst signifikante bit af eksponenten til den første bit af den parvis grupperede mantisse.
Et bord med tre elementer kan udvides til at omfatte yderligere mantissebits. Men når det drejer sig om computere, er det i stedet for at beregne interpolationen i en tabel ofte bedre at kigge efter en enklere måde at regne på, der giver de samme resultater. Alt afhænger nu af de nøjagtige detaljer i talrepræsentationsformatet og af de operationer, der er tilgængelige for at få dele af nummeret og arbejde med dem. Fortran indeholder for eksempel en funktion EXPONENT(x)til at opnå en grad. Den indsats, der bruges på at få en god indledende tilnærmelse, betaler sig ved at eliminere de yderligere gentagelser af forfiningsprocessen, der ville være påkrævet i tilfælde af en dårlig tilnærmelse.
Mange computere følger IEEE floating point-standarden (eller en ret tæt repræsentation), og en meget hurtig kvadratrodstilnærmelse kan opnås som udgangspunkt for Newtons metode. Teknikken til denne tilnærmelse stammer fra det faktum, at det flydende talformat (grundtal 2) tilnærmer sig basis 2-logaritmen. Det vil sige,
Så for et 32-bit IEEE flydende kommatal (hvor eksponenten har en offset på 127 [16] ), kan du få en omtrentlig logaritme ved at fortolke tallet som et 32-bit heltal, gange det med og subtrahering af forskydningen 127, dvs
For eksempel er tallet 1,0 i hexadecimal 0x3F800000, som kan repræsenteres som, når det ses som et heltal. Ved at bruge ovenstående formel får du som forventet fra . På samme måde får du 0,5 ud af 1,5 (=0x3FC00000).
For at få kvadratroden skal du dividere logaritmen med 2 og konvertere resultatet tilbage. Nedenstående program demonstrerer ideen. Bemærk, at den mindst signifikante bit af eksponenten er bevidst oversat til mantissen. En måde at retfærdiggøre trinene i dette program, forudsat at det er forskydningen af graden, og er antallet af lagrede bits i mantissen, er at bevise
/* Antag, at det flydende tal er i IEEE 754-format */ #include <stdint.h> float sqrt_approx ( float z ) { union { flyde f ; uint32_t i ; } val = { z }; /* Konverter typen uden at ændre bitrepræsentationen */ /* * Bevis at * ((((val.i / 2^m) - b) / 2) + b) * 2^m = ((val.i - 2^m) / 2) + ((b + 1) / 2) * 2^m) * hvor * b = effektforskydning * m = antal bits i mantisse */ val . i -= 1 << 23 ; /* Træk 2^m fra. */ val . i >>= 1 ; /* Divider med 2. */ val . i += 1 << 29 ; /* Tilføj ((b + 1) / 2) * 2^m. */ returværdi . _ f ; /* Fortolk som float igen */ }De tre regneoperationer, der udgør kernen i funktionen, kan repræsenteres på én linje. En yderligere forfining kan tilføjes for at reducere den maksimale relative fejl. Således kan de tre operationer, ikke inklusive reduktionen til reel, omskrives som
val . i = ( 1 << 29 ) + ( val . i >> 1 ) - ( 1 << 22 ) + a ;hvor a er en offset for at reducere tilnærmelsesfejl. For eksempel, med a = 0 er resultaterne nøjagtige for lige potenser af 2 (f.eks. 1,0), men for andre tal vil resultatet være noget stort (f.eks. 1,5 for 2,0 i stedet for 1,414... med en 6% fejl). For a = −0x4B0D2 reduceres den maksimale relative fejl til ±3,5 %.
Hvis tilnærmelsen skal bruges som startværdi for Newtons metode i ligningen , så er den inverse form vist i næste afsnit at foretrække.
En variant af ovenstående fremgangsmåde er præsenteret nedenfor og kan bruges til at beregne det omvendte af kvadratroden, dvs. Denne variant er skrevet af Greg Walsh. Skifttilnærmelsen giver en relativ fejl på mindre end 4 % og fejlen reduceres til 0,15 % efter én iteration af Newtons metode [17] . I computergrafik er dette en meget effektiv måde at normalisere en vektor på.
float invSqrt ( float x ) { float xhalv = 0,5f * x ; union { flyde x ; int i ; } u ; u . x = x ; u . i = 0x5f375a86 - ( u . i >> 1 ); /* Den næste linje kan gentages et vilkårligt antal gange for at øge præcisionen */ u . x = u . x * ( 1,5f - xhalv * u . x * u . x ); returnere u . x ; }Nogle VLSI implementerer at finde den reciproke af kvadratroden ved hjælp af et polynomieestimat efterfulgt af Goldschmidt iteration [18] .
Hvis , så er dens hovedrod lig med
Hvis , hvor a og b er reelle tal og , Så er dens hovedrod lig med
Dette kan kontrolleres ved at kvadrere [19] [20] . Her
er modulet af tallet S . Hovedroden af et komplekst tal er defineret som en rod med en ikke-negativ reel del.