Arithmetic-geometric mean/Calculate Pi: Difference between revisions
Content added Content deleted
(Arithmetic-geometric mean/Calculate Pi in various dialects BASIC (BASIC256, FreeBASIC, True BASIC and Yabasic)) |
(RPL: add section) |
||
Line 1,682: | Line 1,682: | ||
1004 3.141...201989381 |
1004 3.141...201989381 |
||
1005 3.141...2019893810</pre> |
1005 3.141...2019893810</pre> |
||
=={{header|RPL}}== |
|||
{{trans|BASIC}} |
|||
{{works with|Halcyon Calc|4.2.7}} |
|||
{| class="wikitable" |
|||
! RPL code |
|||
! Comment |
|||
|- |
|||
| |
|||
≪ → digits |
|||
≪ 0.5 SQ 1 1 0.5 √ |
|||
'''WHILE''' 3 PICK digits ≤ '''REPEAT''' |
|||
OVER |
|||
ROT 3 PICK + 2 / ROT ROT |
|||
SWAP OVER * √ SWAP |
|||
3 PICK - |
|||
5 ROLL SWAP SQ 5 PICK * - 4 ROLLD |
|||
ROT DUP + ROT ROT |
|||
'''END''' |
|||
+ SQ ROT 4 * / |
|||
SWAP DROP |
|||
≫ ≫ ‘'''AGMPI'''’ STO |
|||
≪ { } 1 5 FOR d d '''AGMPI''' NEXT |
|||
≫ ‘'''TASK'''’ STO |
|||
| |
|||
'''AGMPI''' ''( digits -- pi )'' |
|||
tn = 0.5 ^ 2 : pn = 1.0 : an = 1.0 : bn = sqrt(0.5) |
|||
while pn <= digits |
|||
prevAn = an |
|||
an = (bn + an) / 2 |
|||
bn = sqrt(bn * prevAn) |
|||
prevAn = prevAn - an |
|||
tn = tn - (pn * prevAn ^ 2) |
|||
pn = pn + pn |
|||
wend |
|||
print ((an + bn) ^ 2) / (tn * 4) |
|||
// clean stack |
|||
|} |
|||
{{out}} |
|||
<pre> |
|||
5: 2.91421356238 |
|||
4: 3.14057925053 |
|||
3: 3.14159264619 |
|||
2: 3.14159264619 |
|||
1: 3.14159265359 |
|||
</pre> |
|||
=={{header|Ruby}}== |
=={{header|Ruby}}== |