47 lines
1000 B
Plaintext
47 lines
1000 B
Plaintext
INCLUDE "H6:REALMATH.ACT"
|
|
|
|
PROC NthRoot(REAL POINTER a,n REAL POINTER res)
|
|
REAL n1,eps,one,tmp1,tmp2,tmp3
|
|
|
|
ValR("0.0001",eps)
|
|
IntToReal(1,one)
|
|
RealSub(n,one,n1)
|
|
|
|
Sqrt(a,res) ;res=sqrt(a)
|
|
DO
|
|
Power(res,n,tmp1) ;tmp=res^n
|
|
RealSub(a,tmp1,tmp2) ;tmp2=a-res^n
|
|
RealAbs(tmp2,tmp1) ;tmp1=abs(a-res^n)
|
|
IF RealGreaterOrEqual(eps,tmp1) THEN
|
|
RETURN
|
|
FI
|
|
|
|
Power(res,n1,tmp1) ;tmp1=res^(n-1)
|
|
RealDiv(a,tmp1,tmp2) ;tmp2=a/(res^(n-1))
|
|
RealMult(n1,res,tmp1) ;tmp1=(n-1)*res
|
|
RealAdd(tmp1,tmp2,tmp3) ;tmp3=((n-1)*res + a/(res^(n-1)))
|
|
RealDiv(tmp3,n,res) ;res=((n-1)*res + a/(res^(n-1)))/n
|
|
OD
|
|
RETURN
|
|
|
|
PROC Test(CHAR ARRAY sa,sn)
|
|
REAL a,n,res
|
|
|
|
ValR(sa,a)
|
|
ValR(sn,n)
|
|
PrintR(n) Print(" root of ")
|
|
PrintR(a) Print(" is ")
|
|
NthRoot(a,n,res)
|
|
PrintRE(res)
|
|
RETURN
|
|
|
|
PROC Main()
|
|
Put(125) PutE() ;clear screen
|
|
MathInit()
|
|
Test("2","2")
|
|
Test("81","4")
|
|
Test("1024","10")
|
|
Test("7","0.5")
|
|
Test("12.34","56.78")
|
|
RETURN
|