Ar sekojošo Bisekcijas algoritmu atrod jebkuru n-tās pakāpes sakni racionālam (R) skaitlim. Iteratīvi tuvina rezultātu līdz trāpa vai sasniedz tuvāko iegūstamo reālā laikā. Protams, ja pielietojamas funkcijas kā SQRT vai celšana ^(1/n) daļskaitļa pakāpē, tad šis algoritms ir lieks.
|
' Ceļam 2^32 pakāpē
b = 2
n = 32
S = pow(b,n)
print "Rēķinam ", n, "tās pakāpes sakni no ", S
'Bisekcijas metode
'limitēsim iterāciju skaitu
const iMAX = 9999
' iegaumēsim zīmi
m = (S<0)
if(m) then
S = -S 'meklēsim pozitīvo
end if
' var būt zem 1, tad intervāli otrādi
a = MIN( 1, S )
b = MAX( S, 1 )
for i = 1 to iMAX
' jauns viduspunkts
c = (a + b)/2
' ceļam pakāpē lai pārbaudītu
P = pow(c,n)
If P = S then
exit for
EndIf
if P>S then
b = c
else
if P<S then
a = c
else
'atradām un c ir sakne
exit for
end if
end if
next i
if(m) then
S = -S
c = -c
'protams pāra pakāpes sakne
' no negatīva nav iespējama
end if
print "Sakne ir ", c, " , atrasts ",i, " iterācijās"
Rezultāti:
Rēķinam 32tās pakāpes sakni no 4294967296
Sakne ir 2 , atrasts 64 iterācijās
Rēķinam 32tās pakāpes sakni no 0.000244140625
Sakne ir 0.5 , atrasts 49 iterācijās
Rēķinam 17tās pakāpes sakni no -129140163
Sakne ir -3 , atrasts 78 iterācijās
' sakne, kas ir maksimāli tuvināta
Rēķinam 9tās pakāpes sakni no 1.8014398509482e+16
Sakne ir 64 , atrasts 1000 iterācijās
Nav komentāru:
Ierakstīt komentāru