Pereiti prie turinio

Matematika/Teiloro eilutė

Iš Wikibooks.

Teiloro eilutė išsamiai

[keisti]


Makloreno eilutės įrodymas

[keisti]
Darome prielaidą, kad funkciją galima užrašyti tokia eilute
Tuomet surandame visų eilių (laipsnių) išvestines funkcijos
Kad surasti kam lygūs koeficientai , paimame gautų išvestinių reikšmes nuo nulio (kai ):
Dabar nesunku rasti koeficientus :
Dabar tereikia įstatyti gautus koeficientus į eilutę
Taigi, gavome funkciją išreikšta Makloreno eilute:

Pavyzdžiai

[keisti]
  • Išreikšti funkciją Makloreno eilute.
Sprendimas.
Gauname, kad


  • Užrašyti funkcija Makloreno eilute.
Sprendimas.

Teiloro formulė

[keisti]
Teiloro eilute užrašomos funkcijos pavidalas yra toks:
Čia liekamasis narys Lagranžo formoje yra Ir
Teiloro formulė, kurios vadinama Makloreno formule. Remiantis (8) formule, galime parašyti tokią Makloreno formulės išraišką:
Šįkart

Sinuso liekamojo nario įvertinimas

[keisti]
  • Apskaičiuosime sin(1) su paklaida mažesne nei
Žinoma, kad
Tuomet
Čia k yra sveikasis skaičius. Todėl
čia
Laikysime, kad cos(c)=1. Tada, tarus, kad x=1, turi būti tenkinama nelygybė
Paskutinė nelygybė tenkinama, kai ir tada Tuomet mums reikia paskaičiuoti Makloreno eilutę iki n=9:
=0.84147100970017636684303350970018.
Tikroji (tiksli) sin(1) reikšmė iš skaičiuotuvo yra:
sin(1)=
=0.8414709848078965066525023216303.
Atėmus gautą mūsų skaičiuotą sin(1) reikšmę iš kalkuliatoriaus sin(1) reikšmės gauname tokią paklaidą:
0.8414709848078965066525023216303 - 0.84147100970017636684303350970018=
=-2.4892279860190531188069881000377e-8=
Taigi, viskas apskaičiuota pagal teoriją ir paklaida surasta teisingai.
Pastebėsime, kad todėl paklaida gauta


  • Apskaičiuosime sin(0.1) su paklaida mažesne nei
Pasinaudoję pirmu pavyzdžiu, išeina, kad turi būti tenkinama nelygybė
kurioje laikysime, kad cos(c)=1, o Tada
Pabandykime atspėti, kad sveikasis skaičius k galėtų būti lygus 2. Tada
Nesunku matyti, kad su skaičiumi k=2, paklaida bus mažesnė už Belieka užrašyti sinuso Teiloro eilutę, kai x=0.1, o n=5:
= 0.09983341666666666666666666666667.
Windows kalkuliatoriaus reikšmė yra tokia
sin(0.1) =
= 0.09983341664682815230681419841062.
0.09983341664682815230681419841062 - 0.09983341666666666666666666666667 =
= -1.9838514359852468256047973010085e-11 =
Vadinasi paklaidą radome teisingai.


  • Apskaičiuosime sin(1.5) su paklaida mažesne nei
Pasinaudoję pirmu pavyzdžiu, išeina, kad turi būti tenkinama nelygybė
kurioje laikysime, kad o radiano. Ši nelygybė tenkinama, kai nes
Taigi, matome, kad paklaida bus mažesnė už Sinuso eilutė, kai o yra tokia:
= 1.5 - 3.375/6 7.59375/120 - 17.0859375/5040 38.443359375/362880 - 86.49755859375/39916800 = (šitą išraišką galima iškart įdėt (padaryt "Paste") į Windows kalkuliatorių ir jis iškart atliks visus aritmetinius veiksmus ir duos atsakymą)
= 0.99749495568213524756493506493506.
Gautą sin(1.5) reikšmę atėmę iš tikslios (kalkuliatoriaus) sin(1.5) reikšmės gauname paklaidą:
0.99749498660405443094172337114149 - 0.99749495568213524756493506493506 =
= 3.0921919183376788306206422387642e-8 =
Paklaidos didumas gautas pagal teoriją.


Kosinuso liekamojo nario įvertinimas

[keisti]
  • Apskaičiuosime cos(1) su paklaida mažesne nei
Žinoma, kad
Tuomet
Čia k yra sveikasis skaičius. Todėl
čia
Tada
(nes |cos(c)| negali būti daugiau už 1),
Paskutinė nelygybė tenkinama, kai nes (tada kai x=1)
Dabar galime užrašyti (kosinusas nuo 1 radiano) Makloreno eilutę, kai n=2k=8:
= 0.54030257936507936507936507936508.
Atėmę gautą reikšmę iš tikslios (kalkuliatoriaus) reikšmės gausime:
cos(1) - 0.54030257936507936507936507936508 =
= 0.54030230586813971740093660744298 - 0.54030257936507936507936507936508 =
= -2.7349693964767842847192210276135e-7.
Vadinasi, liekamajį narį apskaičiavome teisingai (kai x lygus 1 radianui).


  • Apskaičiuosime cos(0.1) su paklaida mažesne nei
Pasinaudoję pirmu pavyzdžiu, turime
Paskutinė nelygybė tenkinama, kai o radiano, nes
Dabar galime užrašyti Makloreno eilutę, kai n=2k=4:
= 0.9950041(6).
Tiksli reikšmė yra
cos(0.1) = 0.99500416527802576609556198780387.
Atėmę apskaičiuotą reikšmę iš tikslios reikšmės gauname:
0.99500416527802576609556198780387 - 0.99500416666666666666666666666667 =
= -1.3886409005711046788627997051614e-9 =
Taigi
Ką ir reikėjo parodyti.


  • Apskaičiuosime cos(1.5) su paklaida mažesne nei
Pasinaudoję pirmu pavyzdžiu, turime
Paskutinė nelygybė tenkinama, kai nes
Dabar užrašysime Makloreno eilutę, kai n=2k=12:
= 1 - 2.25/2 5.0625/24 - 11.390625/720 25.62890625/40320 - 57.6650390625/3628800 129.746337890625/479001600 =
(įstačius šią išraišką nuo "1" iki "=" į Windows'ų kalkuliatorių gaunamas iškart apskaičiuotas atsakymas)
= 0.07073720498518510298295454545455.
Tiksli (1.5 radiano) reikšmė iš Windows kalkuliatoriaus yra
cos(1.5) = 0.07073720166770291008818985143427.
Atėmę apskaičiuotą nevisiškai tikslią cos(1.5) reikšmę iš tikslios cos(1.5) reikšmės, gauname paklaidą:
0.07073720166770291008818985143427 - 0.07073720498518510298295454545455 =
= -3.3174821928947646940202767454604e-9.
Matome, kad

Natūrinio logaritmo liekamojo nario įvertinimas

[keisti]
Natūrinio logaritmo reikšmės greitas skaičiavimas: https://en.wikipedia.org/wiki/Natural_logarithm#Efficient_computation
  • Apskaičiuosime ln(1 0.5)=ln(1.5) su paklaida mažesne nei 0.0001, kai
Randame išvestines:
Apskaičiuosime jų reikšmes taške :
Vadinasi,
čia
Matome, kad
Kai o gausime, kad nes
ir 0.00009765625 < 0.0001. Apskaičiuosime kam lygi ši eilutė, kai o :
=0.5-0.25/2 0.125/3-0.0625/4 0.03125/5-0.015625/6 0.0078125/7-0.00390625/8 0.001953125/9=
(įdėjus (padarius "Copy"-"Paste") šią eilutę nuo "0.5" iki "=" į Windows kalkuliatorių iškart gauname atsakymą)
=0.40553230406746031746031746031746.
Kalukiatoriaus ln(1.5) reikšmė yra tokia: ln(1.5)=
=0.40546510810816438197801311546435.
Atėmę mūsų apskaičiuotą eilutės reikšmę iš kalkuliatoriaus ln(1.5) reikšmės, gauname
0.40546510810816438197801311546435 - 0.40553230406746031746031746031746 = -6.7195959295935482304344853111181e-5.
Matome, kad


  • Apskaičiuosime ln(1 0.9)=ln(1.9) su paklaida mažesne nei 0.01, kai
čia
Matome, kad
Kai o gausime, kad nes
ir 0.0060788327295284644005 < 0.01. Apskaičiuosime kam lygi ši eilutė, kai o :
= 0.62619810431142857142857142857143 0.01893065053370873839967787630326 = 0.64512875484513730982824930487469.
Windows kalkuliatoriaus tiksli ln(1.9) reikšmė yra tokia: ln(1.9) = 0.64185388617239477599103597720349.
Atėmę apskaičiuotą netikslią ln(1.9) reikšmę iš tikslios Windows kalkuliatoriaus ln(1.9) reikšmės, gauname:
0.64185388617239477599103597720349 - 0.64512875484513730982824930487469 = -0.0032748686727425338372133276712.
Taigi
Liekamojo nario įvertinimą gavome teisingai.


Pastebėsime, kad kai x reikšmė arti 1 arba lygi 1, tai eilutė gaunasi labai ilga ir atsakymas labai netikslus. Vienas būdas atsakymo skaičiavimą pagreitinti yra užrašymas
arba, pavyzdžiui, kai x=0.99, gautume
ir galime apskaičiuoti su arba Tada Makloreno eilutės skaičiavimai gerokai sutrumpėja, bet vistiek gana ilgi.
galima apskaičiuoti taip:
O galima apskaičiuoti taip:
Daug kartų traukiant šaknį kaip ką tik darėme su ln(2) galima gana greitai apskaičiuoti su bet kokia x reikšme nuo -1 iki 1 ().
Pavyzdžiui, ištraukus 4 kartus kvadratinę šaknį iš 2 gausime
Jei užrašysime eilutę su ir tai
Gavome su paklaida mažesne nei (gali būti, kad padauginus ln(1.04427378242741384) iš 16 paklaida pasidarys truputi didesnė, gal šiuo atveju pasidarys apie ar ).
Pastebėsime, kad pavyzdžiui ln(0.00003) galima apskaičiuoti taip:


  • Apskaičiuosime ln(0.3) su paklaida mažesne nei 0.01. Pasinaudosime pirmu pavyzdžiu.
Vadinasi,
čia Nes
Turime
Kai o gausime:
=1144209.9241170145552684546382425.
Matome, kad tokiu budu ln(0.3) apskaičiuoti negalima (tiksliau, negalima sužinoti paklaidos).
Galima iš 0.3 ištraukti, pavyzdžiui, 4 kartus kvadratinę šaknį. Tada turėsime:
Tada
Turime
Kai o gausime:
=3.6120376523498566762096049279603e-24=
[vietoje (-0.0724) imama -0.07248684403320849089929261472692 reikšmė]
= -0.07524830027034272898276362268037 (-2.8270556157154487988345737336471e-14) =
= -0.07524830027037099953892077716836.
-0.07524830027037099953892077716836 * 16 = -1.2039728043259359926227324346937.
Atėmę gautą ln(0.3) reikšmę iš tikslios kalkuliatoriaus reikšmės (-1.2039728043259359926227462177618), gauname:
-1.2039728043259359926227462177618 - (-1.2039728043259359926227324346937) = -1.3783068138502953610930772512816e-23.
Taigi gavome paklaidą |-1.3783068138502953610930772512816e-23| (tai reiškia ). Ir
Kas atitinka teoriją.
Pastebėsime, kad jeigu vietoje c=-0.07248684403320849, parinksime c=0, tai gausime, kad paklaida turėtų būti mažesnė už
Bet
Ir gaunasi, kad su c=0, gautume truputi melagingą paklaidą.


  • Apskaičiuosime ln(0.11) ir įvertinsime paklaidą.
Iš 0.11 ištrauksime 4 kartus kvadratinę šaknį. Tada turėsime:
Tai yra, x=-0.12886183097395441374956757206472.
Tada
Turime
Kai o gausime:
= 1.2580998343623026293204200398239e-18 =
[vietoje (-0.1288) imama -0.12886183097395441374956757206472 reikšmė]
= -0.13795468205758418170298735700763 -1.6773369704537036636530891506237e-11 =
= -0.13795468207435755140752439364416.
ln(0.11) = -0.13795468207435755140752439364416 * 16 = -2.2072749131897208225203902983066.
Atėmę šią gautą ln(0.11) reikšmę iš tikslios (ln(0.11)=-2.2072749131897208239740393314036) kalkuliatoriaus reikšmės, gauname:
-2.2072749131897208239740393314036 - (-2.2072749131897208225203902983066) =
= -2.2072749131897208239740393314036 2.2072749131897208225203902983066 =
= -1.4536490330969991153804961232531e-18.
Tada
Paklaidos įvertinimas gavosi pagal teoriją. Apskaičiavome ln(0.11) su paklaida mažesne nei (nors paklaida mažesnė nei bet to nuspėti negalėjome).
Pastebėsime, kad Tai yra, Gaunasi truputi neteisingas paklaidos ivertinimas, jei čia
vietoje c=-0.12886183, parinkti c=0.


Pastebėsime, kad ln(0.11) galima užrašyti ir apskaičiuoti taip:
O ln(0.3) galima užrašyti ir apskaičiuoti taip:


Kadangi skaičiuojant ln(x) gali prireikti traukti kvadratinę šaknį, tai pateiksime paprastą algoritmą kaip ištraukti kvadratinę šaknį iš bet kokio skaičiaus.
Kad gauti
Žingsnis 1: Spėjimas G = 1.
Zingsnis 2: Naujas Spėjimas = (G x/G)/2
Pakartoti Žingsnį 2 kiek norima kartų, kad gauti kiek norima tikslų resultatą.
Pavyzdžiui, skaičiavimai:
G = 1
G = (1 2/1)/2 = 3/2 = 1.5
G = (3/2 4/3)/2 = 17/12 = 1.4166666667
G = (17/12 24/17)/2 = 577/408 = 1.414215686
G = (577/408 816/577)/2 = 665857/470832 = 1.4142135623746899106262955788901.
Atėmę gautą reikšmę iš tikslios reikšmės, gauname paklaidą:
1.4142135623730950488016887242097 - 1.4142135623746899106262955788901 = -1.8638618246068546804368315468877e-12 =
Tačiau yra daug greitesnis šaknies traukimo būdas apie kurį galima paskaityti čia https://lt.wikibooks.org/wiki/Sekos_riba#Greitas_šaknies_iš_skaičiaus_a_traukimo_būdas
Dar pastebėsime, kad jeigu skaičiuojamas ln(x) ir x>1.4, tai yra protinga užrašyti, pvz. ln(1.8) taip:
[ ]
Matome, kad tokiu budu ln(0.9)=ln(1-0.1) galima labai greitai apskaičiuoti.

e pakelta x liekamojo nario įvertinimas

[keisti]
  • Apskaičiuosime su paklaida mažesne nei
Kadangi su visais n, priklausantiems natūraliesiems skaičiams, tai
čia
Įrašę į (10) formulę vietoje x skaičių gauname
čia
Kadangi (nes ), tai
Mums reikia, kad
Ši nelygybė jau teisinga, kai nes tuomet
Taigi
= 1 1/2 1/8 1/48 1/384 1/3840 1/46080 1/645120 =
(galima įdėt šitą eilutę nuo "1" iki "1/645120" į kalkuliatorių ir paspaust "=" ir tada bus iškart apskaičiuota šitos eilutės reikšmė)
=1.6487211681547619047619047619048=
Tiksli reikšmė yra tokia:
1.6487212707001281468486507878142.
Atėmę netikslią (gautą) reikšmę iš tikslios reikšmės, gauname paklaidą:
1.6487212707001281468486507878142 - 1.6487211681547619047619047619048 = 1.0254536624208674602590940166689e-7 =


  • Apskaičiuosime su paklaida mažesne nei
Įrašę į (10) formulę vietoje x skaičių gauname
čia
Kadangi (nes ), tai
Mums reikia, kad
Ši nelygybė jau teisinga, kai nes tuomet
Taigi
= 1 1/5 1/50 1/750 1/15000 1/375000 1/11250000 1/393750000 =
(galima nukopijuot šitą eilutę nuo "1" iki "1/393750000" ir padaryt "Paste" į "Windows" kalkuliatorių ir paspaust "=" ir tada bus iškart apskaičiuota šitos eilutės reikšmė)
=1.2214027580952380952380952380952=
Tiksli reikšmė yra tokia:
1.2214027581601698339210719946397.
Atėmę netikslią (gautą) reikšmę iš tikslios reikšmės, gauname paklaidą:
1.2214027581601698339210719946397 - 1.2214027580952380952380952380952 = 0.0000000000649317386829767565445 =
Pastebėsime, kad jau būtų neteisingas paklaidos įvertinimas, nes


  • Apskaičiuosime su paklaida mažesne nei
Įrašę į (10) formulę vietoje x skaičių gauname
čia
Kadangi tai
Mums reikia, kad
Ši nelygybė jau teisinga, kai nes tuomet
Taigi
= 1 1 1/2 1/6 1/24 1/120 1/720 1/5040 =
(galima nukopijuot šitą eilutę nuo "1" iki "1/5040" ir padaryt "Paste" į "Windows" kalkuliatorių ir paspaust "=" ir tada bus iškart apskaičiuota šitos eilutės reikšmė)
=2.718253968253968253968253968254=
Atėmę netikslią (gautą) e reikšmę iš tikslios e reikšmės, gauname paklaidą:
2.7182818284590452353602874713527 - 2.718253968253968253968253968254 = 2.7860205076981392033503098694244e-5 =
Pastebėsime, kad


Parodysime kaip ištraukti bet kokio laipsnio šaknį iš bet kokio skaičiaus a. Kadangi tai, pavyzdžiui,
=0.21972245773362193827904904738451.
Tada 1.2457309396155173259666803366403.
O iš kalkuliatoriaus 1.2457309396155173259666803366403.
Kai skaičius x didesnis tai Makloreno eilutė, skaičiuojant tokiu budu, darosi ilgesnė. Tai yra, jeigu, pavyzdžiui, a=300, o y=1/5, tai
1.1407564949312402118862456292583.
Tada 3.1291346445318980387324449897269.
O iš kalkuliatoriaus 3.1291346445318980387324449897269.
Kai skaičius a iš kurio traukiame šaknį yra labai didelis, o y nėra labai mažas, tai tokiu budu skaičiuojant Makloreno eilutė gaunasi labai ilga, jei reikia didelio tikslumo. Pavyzdžiui, kai a=50000, o y=1/3, tai
3.6065927614700943702242417173212.
Tada 36.840314986403866057798228335798.
O iš kalkuliatoriaus 36.840314986403866057798228335798.


Parodysime kaip greitai ištraukti bet kokio laipsnio šaknį iš bet kokio didelio skaičiaus a. Kaip žinome, Tarkime reikia ištraukti kūbinę šaknį iš skaičiaus a=50000. Tada galime užrašyti
Įstatome gautą x reikšmę į (10.1) eilutę:
Matome, kad visgi šituo budu negalima pagreitinti Makloreno eilutės skaičiavimų. Pastebėsime tik, kad
0.53647930414470012486691977774206,
3.0701134573253942453573219395792.
Bet galima užrašyti taip:
Ir tada
Mums tereikia apskaičiuoti paskui ir gautą atsakymą () pakelti 4 laipsniu. Ir tereikia apskaičiuoti paskui apskaičiuoti ir gautą atsakymą () pakelti 12 laipsniu. Taip Makloreno eilutės ( ir ) labai sutrumpės.
Grįžkime, be didesnių išsidirbinėjimų, prie (10.1) eilutės. Tada
Toliau mums reikia apskaičiuoti
0.53647930414470012486691977774206,
0.76752836433134856133933048489479.
Dar toliau reikia apskaičiuoti ir (su ir Makloreno eilutės gaunasi trumpos ir su dideliu tikslumu):
1.7099786366766969893531088725439,
2.1544346900318837217592935665194.
Gautą reikšmę reikia pakelti ketvirtu laipsniu,
21.544346900318837217592935665194.
Taigi,
1.7099786366766969893531088725439 * 21.544346900318837217592935665194 =
=36.8403149864038660577982283358.
Iš "Windows" kalkuliatoriaus 36.840314986403866057798228335798.
Taigi, suradome būdą kaip labai pagreitinti šaknies traukimą iš labai didelių skaičių.


Pateiksime dar vieną pavyzdį kaip greitai ištrauktį šaknį iš didelio skaičiaus. Tarkime, reikia ištraukti penkto laipsnio šaknį iš skaičiaus a=7358000. Kaip žinome,
Toliau mums reikia apskaičiuoti
0.39915763133651652361254646915311,
0.46051701859880913680359829093687.
Dar toliau reikia apskaičiuoti ir (su ir Makloreno eilutės gaunasi trumpos ir su dideliu tikslumu):
1.4905685604041673920504265746024,
1.5848931924611134852021013733915.
Gautą reikšmę reikia pakelti 6-tu laipsniu,
15.848931924611134852021013733915.
Taigi,
1.4905685604041673920504265746024 * 15.848931924611134852021013733915 =
=23.623919642811269319097605866468.
Iš "Windows" kalkuliatoriaus 23.623919642811269319097605866468.
Atsakymai sutampa.


Pastebėsime, kad jeigu, pavyzdžiui, reikia apskaičiuoti tai tokį reiškinį galima užrašyti taip:
Tada toliau tereikia apskaičiuoti ir gautą rezultatą pakelti 1234567 laipsniu.
Dar galima užrašyti taip:
Tada tereikia apskaičiuoti ir gautą rezultatą pakelti 10000 laipsniu.
Dar pastebėsime, kad jeigu skaičiuosime tai reikės skaičiuoti ir su tokiais ir :
1.9710403835397185935987544646781,
2.2740330378409195175361683606463.
Su tokiom ir reikšmėm ir Makloreno eilutės gausis ilgos. Kad jas labai patrumpinti, galima užrašyti taip:
Toliau galima apskaičiuoti aukščiau aprašytu budu (). Tada
0.19710403835397185935987544646781,
0.22740330378409195175361683606463.
Su tokiom ir reikšmėm ir Makloreno eilutės gausis daug trumpesnės. Toliau tereikės pakelti 6 laipsniu, paskui sudauginti su p ir rezultatą pakelti 10 laipsniu. Ir tada gausime:
6048002.5023225950089917200618921.


Parodysime dar gudresnį būdą apskaičiuoti kai a yra labai didelis skaičius. "Windows 10" kalkuliatoriaus didžiausias įmanomas skaičius yra 9.9999999999999999999999999999999e 9999 (tai reiškia ). Čia yra 32 devynetai prieš "e 9999", bet kai kurie skaitmenys nesimato, nes skaičiuojant pasitaikydavo, kad atėmus iš tikslios reikšmės, mažiau tikslią gaudavosi vis tiek 32 skaitmenys. Kaip suprantu, Extended Precision (80 bit) turi irgi didžiausią įmanoma skaičių, tik su mažiau skaitmenų po kablelio. Nors gali būti, kad truputi mažiau nei 10 pakelta rodikliu 9999, gal 10 peklta 4932, kaip rašo Vikipedijoj:
"The 80-bit floating-point format has a range (including subnormals) from approximately 3.65×10−4951 to 1.18×104932. Although log10(264) ≅ 19.266, this format is usually described as giving approximately eighteen significant digits of precision (the floor of log10(263), the minimum guaranteed precision)."
Taigi, Extended Precision (80 bit) turi apie 18 ar 19 skaitmenų (log10(263) = log10(9,223,372,036,854,775,808) = 18.96488972683) ir apie 4 skaitmenis eksponentės. Tuo tarpu Double Precision (64 bit) turi apie 3 eksponentės skaitmenis (t. y. 999): "Exponents range from −1022 to 1023 because exponents of −1023 (all 0s) and 1024 (all 1s) are reserved for special numbers."
Taigi, iš kalkuliatoriaus
ln(9.9999999999999999999999999999999e 9999) = 23025.850929940456840179914546844.
Ne toks jau didelis skaičius. Tarkim, norime apskaičiuoti Tada
2.2730449437114724198514271513722,
22738.056345371354255844147438102.
Toliau darome taip. Padauginame x (galima padauginti ir iš, pavyzdžiui, kad dar labiau sutrumpinti Makloreno eilutės skaičiavimą) ir tada gauname
0.22740329390315065728263998865254;
2.2730449437114724198514271513722e-5,
0.22738056345371354255844147438102.
Toliau, pagal Makloreno eilutę, apskaičiuojame
1.0000227307077757379114427014178,
1.2553075012077639197733369606026.
Ir galiausiai pakeliame -tuoju laipsniu (arba pakeliame 10000000-tuoju laipsniu, jei x dauginome iš ). Tada
(1.0000227307077757379114427014178 * 1.2553075012077639197733369606026)^100000 =
= 9.990123938748126108971250386732e 9875.
Kalkuliatoriaus reikšmė yra tokia
= 9.9901239387481261089712504055752e 9875 =
Iš tikro, galima buvo padaryt greičiau (tiesiog truputi susipainiojęs buvau (kėliau 5 laipsniu, o ne todėl nesigaudinėjo...)). Štai kaip.
22740.329390315065728263998865254;
0.22740329390315065728263998865254.
Toliau, pagal Makloreno eilutę, apskaičiuojame
1.2553360352357425652203277670022.
Ir toliau tiesiog pakeliam laipsniu:
= 1.2553360352357425652203277670022^100000 =
= 9.9901239387481261089712504105024e 9875.


Bet kokio skaičiaus pakelimas bet kokiu laipsniu (universalus algoritmas)
Jei pakelsime kvadratu, tai gausime Jei toliau pakelsim kvadratu, gausime Jeigu dar toliau pakelsim 16 kvadratu, tai gausime Jei dar toliau pakelsime 256 kvadratu, tai gausime
Kad gauti skaičių 65536, reikia ant "Windows 10" kalkuliatoriaus paspasuti 2, o paskui 4 kartus paspausti mygtuką x2.
Parodysime kaip galima pakelti bet kokį skaičių bet kokiu laipsniu, naudojant tuos pačius veiksmus (nauduojant tą patį algoritmą). Bet šitas algoritmas labiau akcentuotas į pakelimą y laipsniu, skaičių a, kuris yra didesnis už 1.
Tarkim, norime apskaičiuoti Tada
22740.329390315065728263998865254.
Žinome, kad
Tada pažymėkime
0.0000152587890625 * 22740.329390315065728263998865254 =
= 0.34698988937858681836340330299764.
Toliau apskaičiuojame Makloreno eilutę kuri nėra ilga, nes Taigi
1.414802420766463739969945373195.
Toliau reikia pakelti 65536 laipsniu. Tačiau Tiksliai negaliu pasakyt kodėl, bet reikia pakelti kvadratu 16 kartų (tai galima padaryti pasapaudus mygtuką x2 ant kalkuliatoriaus 16 kartų). Tada gausime
= 1.414802420766463739969945373195^65536 = 9.9901239387481261089712504055752e 9875.
Atėmę gautą ay reikšmę iš tikslios "Windows 10" kalkuliatoriaus reikšmės, gauname:
9.9901239387481261089712504055752e 9875 - 9.9901239387481261089712504055752e 9875 =
= 3.8064298062079638161811295770571e 9833.
Kaip sakyta anksčiau, "Windows 10" kalkuliatoriaus tikslumas yra daugiau nei 32 skaitmenys (tie skaitmenys nerodomi). Apytiksli paklaida yra 1.0e 9875 / 1.0e 9833 = 1.e 42, t. y. apie Todėl "Windows 10" kalkuliatorius turi mažiausiai apie 42 skaitmenų tikslumą (kai skaičiavau, dėjau reikšmes į kalkuliatoriaus atmintį, paspaudus "M " įrašymui ir "MR" skaitymui iš atminties). Pasitaikydavo atrodo ir apie paklaida, atėmus mažiau tikslią reikšmę iš tikslios reikšmės su "Windows 10" kalkuliatorium.


  • Kitas pavyzdys. Apskaičiuosime naudojant universalų, ką tik pateiktą algoritmą. Kalkuliatoriaus šito skaičiaus reikšmė yra tokia:
4.0389976297871553397008634098151e 2385 =
5493.0614433405484569762261846126.
= 0.08381746587128522425806009192829.
Toliau apskaičiuojama Makloreno eilutė kuri yra trumpa, bet bendrumo dėlei galima skaičiuoti tokio pat ilgio eilutę kaip praeitame pavyzdyje (kad nekeisti algoritmo kiekvienam skaičiui). Taigi
1.0874303825344221813244886311118.
Toliau reikia pakelti 65536 laipsniu. Tai padarysime 16 kartų pakėlę kvadratu skaičių 1.0874303825344221813244886311118 (skaičių ). Tada gauname:
= 4.0389976297871553397008634098151e 2385.
Atėmę gautą reikšmę iš tikslios "Windows 10" kalkuliatoriaus reikšmės, gauname paklaidą:
8.4648638092084170075729647383904e 2342.
Vadinasi apytiksliai 2385-2342=43 pirmi skaitmenys yra teisingi.


  • Apskaičiuosime šituo universaliu algoritmu. Kalkuliatoriaus šito skaičiaus reikšmė yra tokia:
2.9855588086470807664732431219819e 8477 =
19520.107620245425962920091221327.
= 0.29785320465462380924865861848948.
Toliau apskaičiuojama Makloreno eilutė kuri suprantama nėra ilga. Gautume:
1.3469640453138238767100251046857.
Toliau reikia pakelti 65536 laipsniu. Tai padarysime 16 kartų pakėlę kvadratu skaičių :
= 2.9855588086470807664732431219819e 8477.
Toks pat atsakymas kaip iš kalkuliatoriaus. Atėmę gautą reikšmę, apskaičiuotą šiuo universaliu algoritmu, iš tikslios reikšmės, gauname paklaidą:
9.764728067703454777066384239029e 8434.
Paklaida yra 8477-8434=43 tokia, kad apytiksliai 43 pirmi skaitmenys yra teisingi.


Pasirodo galima naudoti ne tik skaičių ar jo kvadratą, bet ir, pavyzdžiui, skaičių Apskaičiuosime taikydami Makloreno eilutę ir greitą universalų algoritmą. Iš kalkuliatoriaus:
9.3333544088834579475132722410259e-4184 =
Pradedame skaičiavimus.
-9631.7824346074879409819697420947.
= -0.07348466823278417923722816270519.
Toliau apskaičiuojama Makloreno eilutė kuri nėra ilga (nebūtina skaičiuoti su tokia neigiama reikšme; galima apskaičiuoti o paskui gautą rezultatą pakelti -1 laipsniu, bet su turėtų net truputi greičiaus skaičiuotis Makloreno eilutė nei su ). Apskaičiavus Makloreno eilute gautume:
0.92915039119982175027449213911686.
Toliau reikia pakelti laipsniu. Tai padarysime 17 kartų pakėlę kvadratu skaičių (ant kalkuliatoriaus reikia 17 kartų paspausti mygtuką x2):
= 9.3333544088834579475132722410259e-4184.
Toks pat atsakymas kaip iš kalkuliatoriaus. Atėmę gautą reikšmę, apskaičiuotą šiuo universaliu algoritmu, iš tikslios reikšmės, gauname paklaidą (Windows 10 kalkuliatorius turi daugiau skaitmenų tikslumą nei rodo):
-3.1898963077025813192937851493148e-4226.
Paklaida yra 4184-4226=-42 tokia, kad apytiksliai 42 pirmi skaitmenys yra teisingi.


Toks Free Pascal kodas apskaičiuoja :
var a:longint; c:real;
begin
c:=1;
for a:=1 to 100 do
c:=c*0.3;
writeln(c);
Readln;
End.
ir [akimirksniu] duodą rezultatą "5.1537752073201157E-053" (tai reiškia ).
Iš "Windows 10" kalkuliatoriaus: 5.1537752073201133103646112976562e-53 (tai reiškia ). Gavome 15 pirmų teisingų skaitmenų, kas atitinka Double Precision (64 bit) garantuotą tikslumą.
O toks Free Pascal kodas apskaičiuoja :
var a:longint; c:real;
begin
c:=1;
for a:=1 to 600 do
c:=c*0.3;
writeln(c);
Readln;
End.
ir [akimirksniu] duodą rezultatą "1.8739277038784846E-314" (tai reiškia ).
Iš "Windows 10" kalkuliatoriaus: 1.8739277038847939886754019920358e-314 (tai reiškia ). Gavome tik 11 pirmų teisingų skaitmenų, nors kodas skaičiavo su Double Precision (64 bit) tikslumu, kuris duoda nuo 15 iki 17 skaitmenų tikslumą.
Tačiau, jei panaudosime eilutę "for a:=1 to 585 do" vietoje "for a:=1 to 600 do", tai gausime "1.3059724367053167E-306". Kalkuliatoriaus reikšmė yra tokia Gavome 15 pirmų teisingų skaitmenų su FP kodu.
Jei šis FP kodas pasiliks toks pat tik bus pakeista eilutė "for a:=1 to 600 do" į eilutę "for a:=1 to 610 do", tai gaunamas FP kodo atsakymas yra "1.1065094204260558E-319". Tiksli kalkuliatoriaus reikšmė yra: 1.1065355698669320023729381222772e-319. Su Free Pascal kodu gavome tik 5 pirmus teisingus skaitmenis.
O jeigu panaudosime tokią FP kodo eilutę "for a:=1 to 620 do", tai FP duos tokį atsakymą: "0.0000000000000000E 000". Tuo tarpu kalkuliatoriaus reikšmė yra tokia: 6.5339818865072467808119623182348e-325.
Panašu, kad skaičiuojant su Free Pascal, atliekant daug daugybos veiksmų tikslumas pradeda mažėt.
Iš kitos pusės, toks Free Pascal kodas (kuris skaičiuoja ):
var a:longint; c:real;
begin
c:=1;
for a:=1 to 646 do
c:=c*3;
writeln(c);
Readln;
End.
duoda akimirksniu atsakymą "1.6608505280233451E 308". Kalkuliatoriaus atsakymas: 1.6608505280233424907169817301232e 308. Su FP gavome 15 pirmų teisingu skaitmenų.
Bet jeigu įrašysime "for a:=1 to 647 do" vietoje "for a:=1 to 646 do", tai jau Free Pascal kodas neskaičiuoja ir duoda klaidą "exited with exitcode = 205".
Toks Free Pascal kodas (kuris skaičiuoja ):
var a:longint; c:real;
begin
c:=1;
for a:=1 to 308 do
c:=c*10;
writeln(c);
Readln;
End.
duoda akimirksniu atsakymą "9.9999999999999981E 307". Ir panašu, kad yra maksimalus skaičius, kurį supranta "Free Pascal", nes su kodo eilute "for a:=1 to 309 do" šitas kodas duoda klaidą "exited with exitcode = 205".


Pasirodo, kad apytiksliai ir yra didžiausias skaičius Double Precision formate. Va čia https://www.ragestorm.net/downloads/387intel.txt
Skyrelyje "2.2.2.3 Real Numbers" pasukus truputi žemiau yra "Table 2-3. Summary of Format Parameters":
Parameter_________________ZDDDDDDDD Format DDDDDDDD?
__________________________Single_ _Double_ _Extended
Format width in bits__________32_______64_________80
p (bits of precision)_________24_______53_________64
Exponent width in bits_________8_______11_________15
Emax________________________ 127____ 1023_____ 16383
Emin________________________-126____-1022_____-16382
Exponent bias_______________ 127____ 1023_____ 16383
Taigi, Double Precision didžiausias skaičius yra 8.9884656743115795386465259539451e 307 (dar turbūt reikia šitą skaičių padauginti iš 9.99999999999999 ar panašiai). ().
Beje, Double Extended Precision 5.94865747678615882542879663314e 4931. ( ).
Be to, 2.2250738585072013830902327173324e-308. Todėl, tikriausiai, dėl to tikslumas ir prarandamas kai eksponentė yra mažiau nei -308 (pavyzdžiui, -314 ar -319), nes toks absoliučiu didžiu mažas skaičius net nepalaikomas Double Precision (64 bit) formate.

Nuorodos

[keisti]