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 " |
<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 |
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) |