Anonymous user
Monte Carlo methods: Difference between revisions
m
→{{header|REXX}}: added/changed whitespace and comments.
m (→{{header|REXX}}: added/changed whitespace and comments.) |
|||
Line 2,119:
A specific-purpose commatizer function is included to format the number of iterations.
<lang rexx>/*REXX program computes and displays the value of pi÷4 using the Monte Carlo algorithm*/
/*true pi*/ pi=3.141592653589793238462643383279502884197169399375105820974944592307816406▼
parse arg times chunk digs r? . /*does user want a specific number? */
if chunk=='' | chunk=="," then chunk= 100000 /*perform Monte Carlo in 100k chunks.*/
if digs =='' | digs=="," then digs= 99 /*indicates to use length of PI - 1. */
if datatype(r?, 'W') then call random ,,r? /*Is there a random seed? Then use it.*/
pi= strip( left(pi, digs + length(.) ) ) /*obtain length of pi to what's wanted.*/
numeric digits length(pi) - 1 /*define decimal digits as length PI -1*/
say ' 1 2 3 4 5 6 7 '
say 'scale: 1·234567890123456789012345678901234567890123456789012345678901234567890123'
say /* [↑] a
say 'true pi= ' pi"+" /*we might as well brag about true pi.*/
▲if times=='' | times=="," then times=5e12 /*five trillion should do it, hopefully*/
limit=10000 - 1 /*REXX random generates only integers. */▼
do j=1 for times % chunk
▲accuracy=0 /*accuracy of Monte Carlo pi (so far).*/
▲!=0; @reps= 'repetitions: Monte Carlo pi is' /*pi decimal digit accuracy (so far).*/
reps= chunk * j
_= compare(4*! / reps, pi)
if _<=accuracy then iterate
▲ reps=chunk * j /*calculate the number of repetitions. */
end /*j*/▼
▲ say right(comma(reps), 20) @reps 'accurate to' _-1 "places." /*─1 ≡ dec. point*/
▲ accuracy=_ /*use this accuracy for next baseline. */
▲ end /*j*/
▲exit /*stick a fork in it, we're all done. */
/*──────────────────────────────────────────────────────────────────────────────────────*/
{{out|output|text= when using the default input:}}
<pre>
|