int-1 / Pi_Maxima
.pdfPi.wxm |
1 / 3 |
Вычисление числа Pi методом Монте-Карло
(%i1) /* Вычисление числа Pi методом Монте-Карло */
kill(all);
ntmax:10000; m:0$
for n:1 thru ntmax step 1 do
(
x:random(1.0), y:random(1.0), if x*x+y*y <= 1.0 then m:m+1, res:float(4*m/n),
if ((n=10) or (n=100) or (n=1000) or (n=10000) or (n=ntmax)) then
print ("n=",n, " m=",m, " res=",res)
);
print ("Exact value of Pi=",float(%pi))$ (%o0) done
(%o1) 10000
n= 10 m= 9 |
res= 3.6 |
||
n= 100 |
m= 83 |
res= 3.32 |
|
n= 1000 |
m= 800 |
res= 3.2 |
|
n= 10000 |
m= 7864 |
res= 3.1456 |
(%o3) done
Exact value of Pi= 3.141592653589793
Pi.wxm |
2 / 3 |
(%i5) kill(all);
funpi(ntmax):=block([n,m,x,y,res],
m:0,
for n:1 thru ntmax step 1 do
(
x:random(1.0), y:random(1.0), if x*x+y*y <= 1.0 then m:m+1, res:float(4*m/n),
if ((n=10) or (n=100) or (n=1000) or (n=10000) or (n=ntmax)) then
print ("n=",n, " m=",m, " res=",res)
)
)$
/* Returns the number of seconds since midnight, January 1, 1900 UTC. The return value is an integer */ t0:absolute_real_time ()$
funpi(100000); t1:absolute_real_time ()-t0$ print ("t1=",t1)$
(%o0) done
n= 10 |
m= 8 res= 3.2 |
|||
n= 100 |
m= 74 |
res= 2.96 |
||
n= 1000 |
|
m= 772 |
res= 3.088 |
|
n= 10000 |
m= 7797 |
res= 3.1188 |
||
n= 100000 |
m= 78437 |
res= 3.13748 |
||
(%o3) done |
|
|
||
t1= 7 |
|
|
|
|
(%i6) translate(funpi);
/* Returns the number of seconds since midnight, January 1, 1900 UTC. The return value is an integer */ t0:absolute_real_time ()$
funpi(100000); t2:absolute_real_time ()-t0$ print ("t2=",t2)$
(%o6) [funpi ]
n= 10 |
m= 7 res= 2.8 |
|||
n= 100 |
m= 81 |
res= 3.24 |
||
n= 1000 |
|
m= 786 |
res= 3.144 |
|
n= 10000 |
m= 7882 |
res= 3.1528 |
||
n= 100000 |
m= 78302 |
res= 3.13208 |
||
(%o8) done |
|
|
||
t2= 4 |
|
|
|
|
Pi.wxm |
3 / 3 |
(%i11) compile(funpi);
/* Returns the number of seconds since midnight, January 1, 1900 UTC. The return value is an integer */ t0:absolute_real_time ()$
funpi(100000); t3:absolute_real_time ()-t0$ print ("t3=",t3)$
Compiling C:/Users/Green/AppData/Local/Temp/gazonk_3936_0.lsp. End of Pass 1.
End of Pass 2.
OPTIMIZE levels: Safety=2, Space=3, Speed=3
Finished compiling C:/Users/Green/AppData/Local/Temp/gazonk_3936_0.lsp. (%o11) [funpi ]
n= 10 |
m= 9 res= 3.6 |
|||
n= 100 |
m= 81 |
res= 3.24 |
||
n= 1000 |
|
m= 766 |
res= 3.064 |
|
n= 10000 |
m= 7838 |
res= 3.1352 |
||
n= 100000 |
m= 78829 |
res= 3.15316 |
||
(%o13) done |
|
|
||
t3= 4 |
|
|
|
|
(%i16) kill(all);
(%o0) done