Arithmetic-geometric mean: Difference between revisions

Content added Content deleted
(Added solution for Action!)
(Using Real Math module)
Line 154: Line 154:
=={{header|Action!}}==
=={{header|Action!}}==
{{libheader|Action! Tool Kit}}
{{libheader|Action! Tool Kit}}
{{libheader|Action! Real Math}}
<lang Action!>INCLUDE "D2:REAL.ACT" ;from the Action! Tool Kit
<lang Action!>INCLUDE "H6:REALMATH.ACT"

BYTE FUNC Equal(REAL POINTER a,b)
BYTE ARRAY x,y

x=a y=b
IF x(0)=y(0) AND x(1)=y(1) AND x(2)=y(2) THEN
RETURN (1)
FI
RETURN (0)

BYTE FUNC GreaterOrEqual(REAL POINTER left,right)
REAL diff
BYTE ARRAY x

RealSub(left,right,diff)
x=diff

IF (x(0)&$80)=$00 THEN
RETURN (1)
FI
RETURN (0)

PROC Sqrt(REAL POINTER a,b)
REAL z,half

IntToReal(0,z)
ValR("0.5",half)
IF Equal(a,z) THEN
RealAssign(z,b)
ELSE
Power(a,half,b)
FI
RETURN


PROC Agm(REAL POINTER a0,g0,result)
PROC Agm(REAL POINTER a0,g0,result)
Line 202: Line 169:
RealMult(prevA,g,tmp)
RealMult(prevA,g,tmp)
Sqrt(tmp,g)
Sqrt(tmp,g)
IF GreaterOrEqual(a,prevA) THEN
IF RealGreaterOrEqual(a,prevA) THEN
EXIT
EXIT
FI
FI
Line 214: Line 181:
Put(125) PutE() ;clear screen
Put(125) PutE() ;clear screen


MathInit()
IntToReal(1,r1)
IntToReal(1,r1)
IntToReal(2,r2)
IntToReal(2,r2)