Metode za izračunavanje kvadratnog korena

S Vikipedije, slobodne enciklopedije

U numeričkoj analizi, ogranku matematike, postoji nekoliko 'algoritama kvadratnog korena' ili 'metode izračunavanja glavnog kvadratnog korena'. Za kvadratni koren negativnog ili kompleksnog broja, pogledajte ispod. Pronalaženje je isto kao i rešavanje jednačine . Stoga, svaki opšti algoritam pronalaženja korena se može koristiti. Njutnove metode, na primer, smanjuju se u ovom slučaju takozvanim Vavilonskom metodom.

Uopšteno, ove metode daju približne rezultate. Da biste dobili veću preciznost za korenovanje, veća preciznost za kvadrat je potrebna kao i veći broj koraka koji se mora izračunati.

Gruba procena[uredi | uredi izvor]

Mnogi algoritmi kvadratnih korena zahtevaju inicijalnu vrednost . Ako je početna vrednost daleko od stvarnog kvadratnog korena, algoritam će biti usporen. Stoga je korisno imati grubu procenu, što može biti vrlo netačno, ali lako za izračunati. Uz izražen u naučnoj notaciji gde n je ceo broj, kvadratni koren može se proceniti kao

Faktori dva i šest koriste se jer se tako približimo geometrijskoj sredini s od najniže i najviše moguće vrednosti sa određenim brojem cifara: and .

Za , procena je .

Kada se radi u binarnom brojevom sistemu (kao što računari rade interno), izražavajući kao gde , kvadratni koren može se predstaviti kao , budući da je geometrijska sredina od najnižih i najviših vrednosti . Za binarna aproksimacija daje Ove približne vrednosti su korisne za pronalaženje boljeg početka za iterativne algoritme, što dovodi do bržeg približavanja-određivanja.

Vavilonski metod[uredi | uredi izvor]

Grafikon korišćenje vavilonske metode za približavanje kvadratnog korena 100 (10) pomoću početne vrednosti x0 = 50, x0 = 1, i x0 = −5. Imajte na umu da korišćenje negativne početne vrednosti daje negativan koren.

Prvi algoritam za približavanje S je poznat kao 'Vavilonska metoda' , nazvan po Vaviloncima. Nema direktnih dokaza koji pokazuje kako su Vavilonci izračunavali kvadratni koren, iako postoji dosta pretpostavki. Heronov metod, nazvan po grčkom matematičaru prvog veka Heronu iz Aleksandrije koji je dao prvi eksplicitan opis ovog metoda[1] Može se izvesti iz (ali prethodi 16 veka pre) Njutnovog metoda. Osnovna ideja je da ako je x precenjen za kvadratni koren ne-negativnog realnog broja S onda S/x će biti potcenjen i tako se razumno može očekivati prosek ova dva broja da se obezbedi bolja aproksimacija (iako je formalno dokaz o toj tvrdnji zavisi od nejednakosti aritmetičkih i geometrijskih sredstvava koji pokazuje ovaj prosek da je uvek precenjen od kvadratnog korena, kao što je navedeno u članku o kvadratnom korenu, što omogućava konvergencije). Tačnije, ako je x naša početna pretpostavka za S i e je greška u našoj proceni takva da S = (x+ e)2, onda možemo da proširimo binomno i rešiti ga za

kada je .

Dakle, možemo nadoknaditi greške i ažurirati našu staru procenu kao

Pošto izračunata greška nije tačna, to postaje naša sledeća najbolja pretpostavka. Proces ažuriranja je ponovljen dok se željena tačnost ne dobije. Ovo je kvadratni konvergencijalni algoritam, što znači da se broj ispravnih cifara približavanjem otprilike udvostručuje sa svakim ponavljanjem. Onda nastavlja kao:

  1. Počinje sa proizvoljnom pozitivnom početnom vrednošću x0 (što je bliže stvarnom kvadratnom korenu S , to bolje).
  2. Neka xn + 1 bude prosek od xn i S/xn (Koristeći aritmetičku sredinu kao da je približna geometrijska srednja vrednost).
  3. Ponoviti korak 2 sve dok se ne postigne željena tačnost

Prethodni koraci se mogu takođe predstaviti i kao:

Primer[uredi | uredi izvor]

Za izračunavanje S, gde je S = 125348, do 6 značajnih figura, koristite metod grube procene iznad da dobijete rezultat

Stoga, 125348 ≈ 354.045.

Konvergencija[uredi | uredi izvor]

Neka relativna greška u xn bude definisana sa

tada je

Onda se može pokazati

tako da važi

i samim tim približavanje je osigurano pod uslovom da su i x0 i S su istovremeno pozitivni.

Najgori slučaj za približavanje[uredi | uredi izvor]

Ako koristite grubu procenu sa Vavilonskom metodom, onda su najmanje tačni slučajevi u rastućem redosledu:

Prema tome u svakom slučaju,

Zaokruživanje greške će usporiti približavanje. Preporučuje se da se zadrži barem jedna dodatna cifra iza željene tačnosti xn tako da se rezultatu minimizira greška zaokruživanja.

Cifra po cifru računanje[uredi | uredi izvor]

Ovo je metod da pronađete svaku cifru od kvadratnog korena u nizu. To je sporije nego Vavilonska metoda (ako imate kalkulator koji može podeliti u jednoj operaciji), ali ima nekoliko prednosti:

  • Može biti lakše za ručne kalkulacije .
  • Svaka cifra korena koja je pronađena je tačna, odnosno, ne mora kasnije da bude promenjena
  • Ako kvadratni koren ima ekspanziju da prestane, algoritam završava posle poslednje cifre kada je pronađena. Prema tome, može se koristiti za proveru ispravnosti, ceo broj je kvadratni broj.
  • Algoritam radi za bilo koji brojevni sistem, i naravno, način na koji postupa zavisi od izabranog sistema.

Osnovni princip[uredi | uredi izvor]

Pretpostavimo da smo u stanju da pronađemo kvadratni koren broja N izražavajući ga kao zbir ' n pozitivnih brojeva takvih da

Po nekoliko puta primenom osnovnog identiteta

termin desna strana može se proširiti kao

Ovaj izraz nam omogućava da pronađemo kvadratni koren od uzastopno pogađane vrednosti s. Pretpostavimo da su brojevi već bili izabrani, onda n-tog broja na desnoj strani od sumiranja daje , gde je približna vrednost kvadratni koren koji je do tada pronađen. Sada svaki novi pogodak treba da zadovolji rekurziju

tako da za sve sa početkom kada isti kvadratni koren je pronađen; ako nije, onda sumiranjem s daje odgovarajuće približavanje kvadratnog korena, sa kao približavanje greške.

Na primer, u decimalnom sistemu brojeva imamo

gde su nosioci i koeficijenti . U svakom n-toj fazi kvadratnog računanja korena, približan koren je pronađen, i suma je data

Mesto vrednosti je čak i moć od „10“, mi samo treba da radimo sa parom najznačajnijih cifara u preostalom periodu u svakoj n-toj fazi.

Očigledno je da se sličan metod koristi za izračunavanje kvadratnog korena u drugim brojevim sistemima osim za decimalni sistem brojeva. Na primer, pronalaženje cifre-po-cifru kvadratni koren u binarnom sistemu brojeva je vrlo efikasan, jer je vrednost tražena od manjeg skupa binarnih cifara {0,1}. To čini računanje brže jer u svakoj fazi vrednost je ili za ili za . Činjenica da imamo samo dve moguće opcije za i čini proces odlučivanja vrednosti u n-toj fazi računa lakše. To je zato što samo treba da proverite da li za Ako je ovaj uslov zadovoljen, onda uzimamo ; ako ne onda

Decimalni (baza 10)[uredi | uredi izvor]

Napiši originalni broj u decimalnom obliku. Koren će biti napisan na liniji iznad. Sada razdvajanje cifara u parove, počevši od decimalnog zareza i ide i levo i desno. Decimalna tačka korena će biti iznad decimalnog zareza. Jedna cifra korena će se pojaviti iznad svakog para cifara tog korena.

Počevši sa levim parom cifara, uradite sledeću proceduru za svaki par:

  1. Počevši sa leve strane, spusti najznačajniji (skroz levo) par cifara koji nije iskorišćen (ako su se iskoristile sve cifre, pišite "00") i upišite ih na desnoj strani ostatka iz prethodnog koraka (za prvi korak, neće biti ostatka). Drugim rečima, pomnožite ostatak sa 100 i dodajte dve cifre. To će biti 'trenutna vrednost' c '.
  2. Nađite p, y i x, kao sledeće:
    • Neka p bude deo korena koji je pronađen, ignorišući bilo decimalni zarez. (Za prvi korak, p = 0).
    • Odredite najveću cifru x takvu da . Koristićemo novu promenljivu y = x(20p + x).
      • Pažnja: 20p + x je prosto duplo p, sa cifrom x koja se pojavljuje desno).
      • Pažnja: Možete pronaći x pogađanjem šta je c/(20•p) i šta radi u probnom računanju y, onda podešavanjem x naviše ili naniže prema potrebi.
    • Stavite cifru kao narednu cifru korena, npr., iznad dve cifre korena koje ste spustili dole. Tako da će p biti „starije“ p puta 10 plus x.
  3. Oduzimanje y od c da se dobije novi ostatak.
  4. Ako je ostatak nula i nema više cifara za spuštanje, onda je algoritam završen. U suprotnom vratite se na prvi korak za drugo ponavljanje.

Primeri[uredi | uredi izvor]

Naći kvadratni koren od 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          Алгоритам је завршен: Решење је 12.34

Naći kvadratni koren od 2.

          1. 4  1  4  2
       /
     \/  02.00 00 00 00

         02                  1*1 <= 2 < 2*2                 x = 1
         01                    y = x*x = 1*1 = 1
         01 00               24*4 <= 100 < 25*5             x = 4
         00 96                 y = (20+x)*x = 24*4 = 96
            04 00            281*1 <= 400 < 282*2           x = 1
            02 81              y = (280+x)*x = 281*1 = 281
            01 19 00         2824*4 <= 11900 < 2825*5       x = 4
            01 12 96           y = (2820+x)*x = 2824*4 = 11296
               06 04 00      28282*2 <= 60400 < 28283*3     x = 2
                             Жељена прецизност је постигнута:
                             Квадратни корен броја 2 је отприлике 1.4142

Binarni brojevni sistem (baza 2)[uredi | uredi izvor]

Svojstveno cifra-po-cifru algoritmu je pretraga i test tih koraka: pronaći cifru, , kada se desno doda od tekućeg rešenja , tako , gde je vrednost za koju se traži koren. Proširenje: . Trenutna vrednost —ili, obično, ostatak može da se postepeno-ažurira efikasno kada se radi u binarnom, kao vrednost će imati jedan komplet bita („moć dvojke“) i operacije koje su potrebne za računanje i može biti zamenjen sa bržim operacijama.

Primer[uredi | uredi izvor]

Ovde smo dobili kvadratni koren od 81, koji kada se pretvara u binarni daje 1010001. Brojevi u levoj koloni daju mogućnost da između tog broja i nule se koristi za oduzimanje u toj fazi računanja. Konačni odgovor je 1001, koja je u decimalnom broj 9.


             1 0 0 1
            ---------
           √ 1010001
      1      1
             1
            ---------
      101     01  
               0
             --------
      1001     100
                 0
             --------
      10001    10001
               10001
              -------
                   0
short isqrt(short num) {
    short res = 0;
    short bit = 1 << 14; // Други највиши бит је постављен: 1 << 30 за 32 бита
 
    // "бит" почиње са највећом "снагом" четири <= аргумент.
    while (bit > num)
        bit >>= 2;
        
    while (bit != 0) {
        if (num >= res + bit) {
            num -= res + bit;
            res = (res >> 1) + bit;
        }
        else
            res >>= 1;
        bit >>= 2;
    }
    return res;
}

Eksponencijalni identitet[uredi | uredi izvor]

Kalkulator obično sprovodi dobre navike da izračuna eksponencijalnu funkciju i prirodni logaritam, a zatim izračunava kvadratni koren S, koristeći identitet pronađenog pomoću svojstva od logaritama () i eksponenata ():

Imenilac odgovara ntom korenu. U slučaju iznad imenilac je 2, pa jednačina navodi da se kvadratni koren može naći.

Bakhshali aproksimacija[uredi | uredi izvor]

Ovaj metod za pronalaženje približnog kvadratnog korena je opisan u drevnom indijskom matematičkom rukopisu pod nazivom „Bakhshali rukopis“. To je ekvivalentno sa dva ponavljanja iz vavilonskog metoda počinje sa N. Originalna prezentacija glasi: Da biste izračunali , pustite N2 da bude najbliža savršenom kvadratu da S. Zatim, izračunati:

Ovo se takođe može zapisati i ovako:

Primer[uredi | uredi izvor]

Pronađite

Vedska metoda za pronalaženje kvadratnog korena[uredi | uredi izvor]

Vedska dupleks metod iz knjige „Vedska Matematika“ je varijanta cifra po cifru metode za izračunavanje kvadratnog korena. 'Dupleks' je kvadrat centralne cifre plus duplo unakrsnog proizvoda cifara na podjednakoj udaljenosti od centra. Dupleks se računa od cifara količnika (kvadratnih korena cifara), računajući do sada, ali nakon početnih cifara. Dupleks se oduzima od dividendi cifara pre drugog oduzimanje za proizvod količnika cifara vremenima delilac cifara. Za savršene korene dupleks i dividenda će dobiti manji i doći do nule posle nekoliko koraka. Za ne-savršene kvadrate dekadnu vrednost kvadratnog korena može se izračunati do preciznosti koju želimo. Međutim, kako se decimalna mesta razmnožavaju, prilagođavanje dupleksa postaje veći i duži za izračunavanje.

Osnovni princip[uredi | uredi izvor]

Nastavljamo sa cifrom-po-cifru računom, pod pretpostavkom da želimo da izrazimo broj N kao kvadrat zbira n pozitivnih brojeva kao

Odrediti delioca kao i dupleks za niz od m brojeva tako da

Dakle, možemo ponovo izraziti identitet u smislu delioca i dupleksa kao

Sada računanje možete da nastavite od rekurzivno pretpostavljanjem vrednosti , tako da

tako da za sve , sa početkom Kada algoritam završi i sumira s daje kvadratni koren. Ova metoda je više liči na „duge podele“ gde je dividenda i je ostatak Za slučaj decimalnih brojeva, ako

gde , onda je početak i delilac će biti . takođe proizvod u bilo kom m-toj fazi biće i dupleks će biti , gde dupleksi od niza . U svakoj m-toj fazi, videćemo da je vrednost dupleksa za jedan manji od proizvoda . Tako, u realnim proračunima uobičajeno je da se oduzeti dupleks vrednosti m-tog niza (m+1)-te faze. Takođe, za razliku od prethodne cifra-po-cifru kvadratnog korena računa, gde je u svakom m-toj fazi, račun se vršio tako što se najznačajniji par cifara u preostalom periodu , metoda dupleks koristi samo jedinstveni najznačajniji cifra . Drugim rečima, da izračunamo dupleks jednog broja, duplo proizvod svaki par sa istim rastojanjem cifara plus kvadrat centra cifre (cifara desno od desne kolone).

Број => Рачунање = Дуплекс
3 ==> 32 = 9
14 ==>2(1•4) = 8 
574 ==> 2(5•4) + 72 = 89
1,421 ==> 2(1•1) + 2(4•2) = 2 + 16 = 18 
10,523 ==> 2(1•3) + 2(0•2) + 52 = 6+0+25 = 31 
406,739 ==> 2(4•9)+ 2(0•3)+ 2(6•7) = 72+0+84  = 156

Primer[uredi | uredi izvor]

Zamislite savršen kvadrat 2809 = 53 < sup > 2 </ sup >. Koristite metod dupleksa da pronađe kvadratni koren 2.809.

  • Spusti broj u grupe od po dve cifre .
  • Definisati 'Delilac' , a 'Dividende' i 'Količnik' da pronađu 'koren' .
  • S obzirom 2809. Razmotrimo prvu grupu, 28.
    • Najbliži savršeni kvadrat ispod te grupe.
    • Koren tog savršenog korena je prva cifra našeg 'korena' .
    • Od 28> 25 i 25 = 5 2 , uzeti 5 kao prvu cifru u kvadratnom korenu.
    • Za delioca se dvostruko ovu prvu cifru (2 • 5), što je 10.
  • Sledeće, podesite podelu okvira sa kolonom.
    • 28: 0 9 je 'dividend' i 5: predstavlja 'količnik' . ( Napomena: količnik treba uvek da bude jedan dvocifreni broj, i to bi trebalo da bude takva da je dividenda u narednoj fazi je ne-negativna. )
    • Stavite dve tačke na desnoj strani 28 i 5 i zadržite dvotačke postrojili vertikalno.
  • Izračunajte 'ostatak' . 28: 25 minus: 3 :. je
    • Ostatak na levoj strani sledeće cifre da dobijete novu dividendu.
    • Evo, dodajte 3 do sledećeg dividendi cifra 0, što čini novi dividendu 30. delioca 10 ide na 30 samo 3 puta.
  • Ponovite operaciju.
    • Nulta ostatak prilogu 9. Devet je sledeći dividenda.
    • Ovo obezbeđuje cifre sa desne strane kolone, tako da umanji dupleks, 3 2 = 9.
    • Oduzimanjem ove dupleks od dividendi 9, nula ostatak rezultatima.
    • Deset u nule je nula. Sledeći koren cifra je nula. Sledeći dupleks 2 (3 • 0) = 0.
    • Dividenda je nula. Ovo je kvadratni koren, 53.

Metod dve promenljive[uredi | uredi izvor]

Ovaj metod je primenjiv za pronalaženje kvadratnog korena i konvergira najbolje za . Ovo, međutim, ima realna ograničenja za kompjutersku kalkulaciju, kao osnovom 2 pokretnim zarezom i fiksne reprezentacija tačke, to je trivijalno da se umnožavaju celim brojem „moći“ 4, i stoga od strane odgovarajućeg broja „moći“ 2, promenom eksponenta ili prebacivanjem. Dakle, > može biti premeštena u rasponu . Osim toga, sledeći metod ne koristi opšte podjele, već samo dodacima, oduzimanja, množenja i podelama dužinama od dva, koji su opet trivijalni da se sprovedu. Nepogodnost ove metode je da numeričke greške se akumuliraju, za razliku od jedne varijabilne iterativne metode poput vavilonskog jedan.

Početni korak ove metode je

dok je iterativni korak

Onda, (while ). Imajte na umu da približavanje , a samim tim i , je kvadratna. Dokaz ove metode je prilično lagan. Prvo, prepisati iterativnu definiciju kao

.

Onda je jednostavno dokazati indukcijom da

a samim tim i približavanje do željenog rezultata je obezbeđena od strane konvergencije to 0, što zauzvrat sledi iz . Ova metoda je razvijena oko 1950. godine

Iterativne metode za recipročne kvadratne korene[uredi | uredi izvor]

Iterativne metode za pronalaženje recipročnog kvadratnog korena S koji je . Nakon što je pronađen, naći jednostavnim množenjem: . Ove iteracija uključuju samo množenje, a ne podele. One su zbog toga brže od Vavilonskog načina-metode. Međutim, oni nisu stabilni. Ako početna vrednost nije blizu uzajamnom kvadratnom korenu, iteracija će da se razilaze daleko od toga, pre nego da se spajaju. Stoga može biti korisno da se izvrši iteracija Vavilonskom metodom na gruboj proceni pre nego što počnete da primenjujete ovu metodu.

  • Primena Njutnove metode jednačini proizvodi metod koji konvergira kvadratnu pomoću 3 množenja korak po korak:
  • Druga iteracija se dobija Halejevom metodom što je „Householder“ metod reda dva. Ova konvergira kubno, ali uključuje četiri množenja po iteraciji:

Goldšmidtov algoritam (Goldschmidt’s algorithm)[uredi | uredi izvor]

Neki računari koriste Goldšmidtov algoritam za istovremeno izračunavanje and . Goldšmidtov algoritam pronalazi brže nego Njutnova iteracija na kompjuteru sa više uputstva. Dva načina pisanja Goldšmidtov algoritma su:[2]

Svaka iteracija:

sve do je dovoljno blizu 1, ili nameštenom broju iteracija.

što stvara

Može se napisati kao:

Svaka iteracija: (Sve 3 operacije u ovoj petlji)

sve do dovoljno blizu 0, ili nameštenom broju iteracija. što stvara

Taylor series[uredi | uredi izvor]

Ako N je aproksimacija , bolji aproksimacija se može naći pomoću „Tejlorovog niza“ kvadratnog korena funkcije:

Kao iterativni metod, redosled konvergencije je jednak broju korišćenih termina. Sa 2 termina, identična je Vavilonskoj metodi. Sa 3 termina, svaka iteracija zauzima skoro onoliko operacije kao Bakhshali približavanje, ali konvergira sporije. Dakle, ovo nije naročito efikasan način računanja. Da bi povećali stopu konvergencije, izaberite N tako da > je što je moguće manji.

Druge metode[uredi | uredi izvor]

Ostale metode su manje efikasnije od onih prikazanih iznad. Potpuno drugačiji metod za računanje kvadratnog korena zasniva se na „CORDIC“ algoritmu, koji koristi samo vrlo jednostavne operacije (sabiranje, oduzimanje, pretragu tabele, ali ne i množenje). Kvadratni koren S može se dobiti kao rešenje pomoću hiperboličnog koordinatnog sistema u vektorskom sistemu, sa sledećim inicijalizacijama:

Ekspanzija verižnog razlomka[uredi | uredi izvor]

Kvadratni iracionalni brojevi (brojevi obrasca , gde su a, b i c su celi brojevi), a naročito kvadratni koreni celih brojeva, imaju periodične verižne razlomke. Ponekad nije cilj računanje numeričke vrednosti kvadratnog korena, već njegova ekspanzija verižnog razlomka. Sledeći iterativni algoritam može da se koristi u tu svrhu (S je bilo koji prirodni broj koji nije „savršeni kvadratni broj“):

Pri tome su mn, dn, i an uvek celi brojevi. Algoritam može da se prekine na ai kada ai = 2 a0,[3] što je lakše sprovesti. Ekspanzija se ponavlja od tada. Niz [a0; a1, a2, a3, …] je ekspanzija verižnog razlomka:

Primer, kvadratni koren od 114 kao verižni razlomak[uredi | uredi izvor]

Počinje se sa m0 = 0; d0 = 1; i a0 = 10 (102 = 100 i 112 = 121 > 114 znači 10 je izabran).

Znači, m1 = 10; d1 = 14; i a1 = 1.

Onda, m2 = 4; d2 = 7; i a2 = 2.

Sada, nazad na drugu jednačinu gore. Shodno tome, jednostavan verižni razlomak za kvadratni koren od 114 je

Njegova vrednost je približno 10,67707 82520 31311 21....

Generalizovani verižni razlomak[uredi | uredi izvor]

Brže metod je da se proceni generalizovani verižni razlomak. Iz formule izvedene:

i činjenica da je 114 2/3 između 102=100 i 112=121 rezulrira u

što je jednostavno pomenuti [10;1,2, 10,2,1, 20,1,2, 10,2,1, 20,1,2, ...] procenjen na svakom trećem mestu. Kombinacijom parova razlomaka dobija se

što je sada [10;1,2, 10,2,1,20,1,2, 10,2,1,20,1,2, ...] procenjen na treće mesto, a na svakih šest mesta nakon toga.

Pelova jednačina[uredi | uredi izvor]

Pelova jednačina (poznata i kao Bramaguptina jednačina, jer je on prvi dao rešenje za ovu konkretnu jednačinu) i njene varijante daju metod za efikasno pronalaženje konvergenata verižnih razlomaka kvadratnih korena celih brojeva. Međutim, to može biti komplikovano da se izvrši, i obično se ne generiše svaki konvergent. Ideje iza metode su sledeće:

  • Ako je (p, q) rešenje (gde su p i q celi brojevi) u jednačini , onda je nastavak razlomka od , i kao takva je odlična racionalna aproksimacija za njega.
  • Ako su (pa, qa) i (pb, qb) rešenja, onda je i:
  • Generalno, ako je (p1, q1) rešenje, onda je moguće da se napravi niz rešenja (pn, qn) zadovoljavajući:

Postupak je sledeći:

  • Pronalaze se pozitivni celi brojevi p1 i q1 takvi da . To je teži deo; To može da se uradi bilo pogađanjem, ili pomoću prilično sofisticirane tehnike.
  • Kako bi se napravio dug spisak konvergenata, ponavlja se:
  • Da bi se brzo našli veći konvergenti, ponavlja se:
Valja imati u vidu da se odgovarajući niz razlomaka poklapa sa onim datim Heronovom metodom počevši sa .
  • U istom slučaju, racionalna aproksimacija je zadovoljena

Aproksimacije koje zavise od pokretne tačke[uredi | uredi izvor]

Broj je zastupljen pokretnim zarezom u formatu kao koji se takođe naziva „naučna notacija“.Njen koren je kvadratni i iz sličnih formula se prijavljuju za kubne korene i logaritme. Na prvi pogled, ovo je bilo poboljšanje u jednostavnosti, ali pretpostavljanjem da je potrebna samo aproksimacija: Onda samo je dobro za red veličine. Dalje, priznaju da će neki, p, biti čudno, pa je za 3141.59 = 3.14159x103 nego se bave razlomkom baze, pomnožite od baze i oduzmite jedan od njega da se napravi još. Korigovani će postati ekvivalent 31.4159x102 tako da će kvadratni koren biti √31.4159 x 10.

Ako je ceo deo prilagođen da se uzima, ne može biti samo vrednosti od 1 do 99, i koji bi se mogao koristiti kao indeks u tabeli od 99 unapred izračunava kvadratni koren da završi procenu. Računar koristi šesnaest baznih što bi zahtevalo veću tabelu, ali upotrebom baze dva će zahtevati samo tri stavke: mogući bit u ceo broj dela prilagođenim su 01 (može biti još tako da nije bilo smene, sećajući se da je normalizuje pomerajuća tačka broj uvek ima ne-nula visoki-red brojke), ili ako je napajanje bilo čudno, 10 ili 11, to su prva dva bita originalne postavke. Tako, 6.25 = 110.01 u binarnom, da normalizuju 1.1001 x 22 tako da su upareni bitovi 01, dok .625 = 0.101 u binarnom normalizuje do 1.01 x 2−1 neparano tako da je prilagođavanje 10.1 x 2−2 i upareni bitovi su 10. Obaveštenje da je nizak redosled ima odjeka u visokom redu. Čak snaga ima nizak-red malo nula i korigovani će početi sa 0, dok je za neparnim da malo je jedan i korigovani će početi 1. Stoga, kada se napajanje prepolovi, to je kao da se njegova malo pomera kako bi postao prvi bit na poravnavanju.

Tabele sa samo tri stavke mogu biti uvećane uključivanjem dodatnih delova mantise. Međutim, sa računarima, izračunati interpolacija u tabeli, često je bolje naći neki jednostavniji račun koji daje ekvivalentne rezultate. Sve sada zavisi od tačnih detalja formata reprezentacije plus koji su dostupni za pristup i manipulaciju delova broja operacija. Na primer, Fortran nudi eksponent (k) funkcija da dobiju „moć“. Trud koji je uložen u kreiranju početnog približavanja je da se nadoknadi čime se izbegava dodatna iteracija procesa prečišćavanja koji bi bio potreban za „siromašna“ približavanja. Budući da su neki (jedna iteracija zahteva podelu, dodatak, i prepolovljavanje) ograničenje je teško.

Mnogi računari prate IEEE pomeranje tačke standard (ili dovoljno slične), i veoma brzo približavanje kvadratnog korena može da se dobije za pokretanje Njutnovog metoda. Tehnika koja sledi se zasniva na činjenici da pomeranje tačke format (u bazi dva) aproksimira bazi-2 logaritmu. To je Dakle, za 32-bitnu peciznost broja pomerajuće tačke u IEEE formatu (gde je posebno da ima pristrasnost od 127 je dodao za predstavljenu formu) možete dobiti približni logaritam tumačeći svoju binarnu zastupljenost kao 32-bitni ceo broj, to skaliranje od , i uklanjanje pristrasnosti od 127, odnosno

Na primer, 1.0 predstavlja heksadecimalni broj 0x3F800000, koji bi predstavljao ako se uzme kao ceo broj. Koristeći formulu iznad dobijate , kao što se očekivalo od . Na sličan način dobijate 0.5 od 1.5 (0x3FC00000).

Da biste dobili kvadratni koren, podelite logaritam sa 2 i pretvorite vrednost nazad. Sledeći program demonstrira ideju. Imajte na umu da najniži bit je kao eksponent namerno dozvoljen da propagira u „mantise“. Jedan od načina da se opravda korak u ovom programu je da preuzme kao eksponent pristrasnosti i kao broj sačuvanih eksplicitnih bitova u „mantise“ i onda pokazati da

float sqrt_approx(float z)
{
    int val_int = *(int*)&z; /* Исти битови али као цели бројеви */
    /*
     * Да би оправдали следећи код, докажите да
     *
     * ((((val_int / 2^m) - b) / 2) + b) * 2^m = ((val_int - 2^m) / 2) + ((b + 1) / 2) * 2^m)
     *
     * где
     *
     * b = експонент пристрасности
     * m = број мантиса битова 
     *
     * .
     */

    val_int -= 1 << 23; /* Одузето са 2^m. */
    val_int >>= 1; /* Подељено са 2. */
    val_int += 1 << 29; /* Додај ((b + 1) / 2) * 2^m. */

    return *(float*)&val_int; 
}

Tri matematičke operacije koje čine jezgro iznad funkcije mogu se izraziti u jednoj liniji. Dodatna podešavanja mogu se dodati da se smanji maksimalna relativna greška. Dakle, tri operacije, možemo zapisati kao

val_int = (1 << 29) + (val_int >> 1) - (1 << 22) + a;

gde a pristrastan za podešavanje približavanje greške. Na primer, sa a = 0 rezultati su tačni za ovlašćenja do 2 (npr., 1.0), već za druge brojeve rezultati će biti malo preveliki (npr.,1.5 za 2.0 umesto 1.414... sa 6% greške). Sa a = -0x4C000, greške su između -3.5% i 3,5%.

Ako se aproksimacija treba koristiti za inicijalnu pretpostavku Njutnovog metoda jednačine , onda je recipročni oblik prikazan u sledećem odeljku prioritetan.

Uzajamni/recipročni kvadratni koreni[uredi | uredi izvor]

Varijanta ove rutine je prikazana u nastavku, ona se može koristiti za izračunavanje recipročnog kvadratnog korena, odnosno umesto, napisao je Greg Valsh (Greg Walsh), a sprovodi u SGI Indigo Gari Taroli (Gary Tarolli).[4][5]

Ceo broj aproksimacije proizvodi relativnu grešku manje od 4%, a greška dodatno pada na 0,15% sa jednom iteracijom Njutnove metode na sledećoj liniji[6] U kompjuterskoj grafici je veoma efikasan način da se normalizuje vektor.

float invSqrt(float x)
{
        float xhalf = 0.5f*x;
        union
        {
  	    float x;
            int i;
        } u;
        u.x = x;
        u.i = 0x5f3759df - (u.i >> 1);
        /* Следећа линија може да се понови неограничен број пута за повећање тачности */
        u.x = u.x * (1.5f - xhalf * u.x * u.x);
        return u.x;
}

Negativni ili kompleksni kvadratni koren[uredi | uredi izvor]

Ako S < 0, onda je glavni kvadratni koren:

Ako S = a+bi gde a i b su realni i b ≠ 0, onda je glavni kvadratni koren:

Ovo se može proveriti kvadriranjem kvadratnog korena.[7][8] Ovde

je modul od S. Glavni kvadratni koren od kompleksnog broja se definiše kao koren sa ne-negativnim realnim delom.

Vidi još[uredi | uredi izvor]

Reference[uredi | uredi izvor]

  1. ^ Heath, Sir Thomas Little (1921). A History of Greek Mathematics. Clarendon Press. str. 323—. 
  2. ^ Markstein, Peter (2004). „Software Division and Square Root Using Goldschmidt's Algorithms”. CiteSeerX: 10.1.1.85.9648.  Nedostaje ili je prazan parametar |url= (pomoć)
  3. ^ Gliga, Alexandra Ioana (17. 3. 2006). On continued fractions of the square root of prime numbers (pdf). Corollary 3.3. 
  4. ^ Rys (29. 11. 2006). „Origin of Quake3's Fast InvSqrt()”. Beyond3D. Pristupljeno 19. 04. 2008. 
  5. ^ Rys (19. 12. 2006). „Origin of Quake3's Fast InvSqrt() - Part Two”. Beyond3D. Pristupljeno 19. 04. 2008. 
  6. ^ Fast Inverse Square Root by Chris Lomont
  7. ^ {{cite book|last1=Abramowitz|first1=Milton|last2=Stegun|first2=Irene A.|title=Handbook of Mathematical Functions: With Formulas, Graphs, and Mathematical Tables| url =|year=1964|publisher=Courier Corporation|isbn=978-0-486-61272-0}
  8. ^ Cooke, Roger (2008). Classical algebra: its nature, origins, and uses. John Wiley and Sons. str. 59. ISBN 978-0-470-25952-8. , Extract: pp. 59

Spoljašnje veze[uredi | uredi izvor]