langs a-z
This commit is contained in:
parent
db842d013d
commit
d066446780
11389 changed files with 98361 additions and 1020 deletions
12
Task/Monte-Carlo-methods/OCaml/monte-carlo-methods.ocaml
Normal file
12
Task/Monte-Carlo-methods/OCaml/monte-carlo-methods.ocaml
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
let get_pi throws =
|
||||
let rec helper i count =
|
||||
if i = throws then count
|
||||
else
|
||||
let rand_x = Random.float 2.0 -. 1.0
|
||||
and rand_y = Random.float 2.0 -. 1.0 in
|
||||
let dist = sqrt (rand_x *. rand_x +. rand_y *. rand_y) in
|
||||
if dist < 1.0 then
|
||||
helper (i+1) (count+1)
|
||||
else
|
||||
helper (i+1) count
|
||||
in float (4 * helper 0 0) /. float throws
|
||||
16
Task/Monte-Carlo-methods/Octave/monte-carlo-methods-1.octave
Normal file
16
Task/Monte-Carlo-methods/Octave/monte-carlo-methods-1.octave
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
function p = montepi(samples)
|
||||
in_circle = 0;
|
||||
for samp = 1:samples
|
||||
v = [ unifrnd(-1,1), unifrnd(-1,1) ];
|
||||
if ( v*v.' <= 1.0 )
|
||||
in_circle++;
|
||||
endif
|
||||
endfor
|
||||
p = 4*in_circle/samples;
|
||||
endfunction
|
||||
|
||||
l = 1e4;
|
||||
while (l < 1e7)
|
||||
disp(montepi(l));
|
||||
l *= 10;
|
||||
endwhile
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
function result = montepi(n)
|
||||
result = sum(rand(1,n).^2+rand(1,n).^2<1)/n*4;
|
||||
endfunction
|
||||
|
|
@ -0,0 +1 @@
|
|||
MonteCarloPi(tests)=4.*sum(i=1,tests,norml2([random(1.),random(1.)])<1)/tests;
|
||||
29
Task/Monte-Carlo-methods/Pascal/monte-carlo-methods.pascal
Normal file
29
Task/Monte-Carlo-methods/Pascal/monte-carlo-methods.pascal
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
Program MonteCarlo(output);
|
||||
|
||||
uses
|
||||
Math;
|
||||
|
||||
function MC_Pi(expo: integer): real;
|
||||
var
|
||||
x, y: real;
|
||||
i, hits, samples: longint;
|
||||
begin
|
||||
samples := 10**expo;
|
||||
hits := 0;
|
||||
randomize;
|
||||
for i := 1 to samples do
|
||||
begin
|
||||
x := random;
|
||||
y := random;
|
||||
if sqrt(x*x + y*y) < 1.0 then
|
||||
inc(hits);
|
||||
end;
|
||||
MC_Pi := 4.0 * hits / samples;
|
||||
end;
|
||||
|
||||
var
|
||||
i: integer;
|
||||
begin
|
||||
for i := 4 to 8 do
|
||||
writeln (10**i, ' samples give ', MC_Pi(i):7:5, ' as pi.');
|
||||
end.
|
||||
10
Task/Monte-Carlo-methods/Perl-6/monte-carlo-methods-1.pl6
Normal file
10
Task/Monte-Carlo-methods/Perl-6/monte-carlo-methods-1.pl6
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
sub approximate_pi (Int $sample_size) {
|
||||
my Int $in = 0;
|
||||
(rand - 1/2)**2 + (rand - 1/2)**2 < 1/4 and ++$in
|
||||
for ^$sample_size;
|
||||
return 4 * $in / $sample_size;
|
||||
}
|
||||
|
||||
say 'n = 100: ', approximate_pi 100;
|
||||
say 'n = 1,000: ', approximate_pi 1_000;
|
||||
say 'n = 10,000: ', approximate_pi 10_000;
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
sub approximate_pi (Int $sample_size) {
|
||||
$sample_size R/ [+]
|
||||
4 xx grep 0 ..^ 1/4,
|
||||
(rand - 1/2)**2 + (rand - 1/2)**2 xx
|
||||
$sample_size;
|
||||
}
|
||||
17
Task/Monte-Carlo-methods/PowerShell/monte-carlo-methods.psh
Normal file
17
Task/Monte-Carlo-methods/PowerShell/monte-carlo-methods.psh
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
function Get-Pi ($Iterations = 10000) {
|
||||
$InCircle = 0
|
||||
for ($i = 0; $i -lt $Iterations; $i++) {
|
||||
$x = Get-Random 1.0
|
||||
$y = Get-Random 1.0
|
||||
if ([Math]::Sqrt($x * $x + $y * $y) -le 1) {
|
||||
$InCircle++
|
||||
}
|
||||
}
|
||||
$Pi = [decimal] $InCircle / $Iterations * 4
|
||||
$RealPi = [decimal] "3.141592653589793238462643383280"
|
||||
$Diff = [Math]::Abs(($Pi - $RealPi) / $RealPi * 100)
|
||||
New-Object PSObject `
|
||||
| Add-Member -PassThru NoteProperty Iterations $Iterations `
|
||||
| Add-Member -PassThru NoteProperty Pi $Pi `
|
||||
| Add-Member -PassThru NoteProperty "% Difference" $Diff
|
||||
}
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
OpenConsole()
|
||||
|
||||
Procedure.d MonteCarloPi(throws.d)
|
||||
inCircle.d = 0
|
||||
For i = 1 To throws.d
|
||||
randX.d = (Random(2147483647)/2147483647)*2-1
|
||||
randY.d = (Random(2147483647)/2147483647)*2-1
|
||||
dist.d = Sqr(randX.d*randX.d + randY.d*randY.d)
|
||||
If dist.d < 1
|
||||
inCircle = inCircle + 1
|
||||
EndIf
|
||||
Next i
|
||||
pi.d = (4 * inCircle / throws.d)
|
||||
ProcedureReturn pi.d
|
||||
|
||||
EndProcedure
|
||||
|
||||
PrintN ("'built-in' #Pi = " + StrD(#PI,20))
|
||||
PrintN ("MonteCarloPi(10000) = " + StrD(MonteCarloPi(10000),20))
|
||||
PrintN ("MonteCarloPi(100000) = " + StrD(MonteCarloPi(100000),20))
|
||||
PrintN ("MonteCarloPi(1000000) = " + StrD(MonteCarloPi(1000000),20))
|
||||
PrintN ("MonteCarloPi(10000000) = " + StrD(MonteCarloPi(10000000),20))
|
||||
|
||||
PrintN("Press any key"): Repeat: Until Inkey() <> ""
|
||||
26
Task/Monte-Carlo-methods/Seed7/monte-carlo-methods.seed7
Normal file
26
Task/Monte-Carlo-methods/Seed7/monte-carlo-methods.seed7
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
$ include "seed7_05.s7i";
|
||||
include "float.s7i";
|
||||
|
||||
const func float: pi (in integer: throws) is func
|
||||
result
|
||||
var float: pi is 0.0;
|
||||
local
|
||||
var integer: throw is 0;
|
||||
var integer: inside is 0;
|
||||
begin
|
||||
for throw range 1 to throws do
|
||||
if rand(0.0, 1.0) ** 2 + rand(0.0, 1.0) ** 2 <= 1.0 then
|
||||
incr(inside);
|
||||
end if;
|
||||
end for;
|
||||
pi := flt(4 * inside) / flt(throws);
|
||||
end func;
|
||||
|
||||
const proc: main is func
|
||||
begin
|
||||
writeln(" 10000: " <& pi( 10000) digits 5);
|
||||
writeln(" 100000: " <& pi( 100000) digits 5);
|
||||
writeln(" 1000000: " <& pi( 1000000) digits 5);
|
||||
writeln(" 10000000: " <& pi( 10000000) digits 5);
|
||||
writeln("100000000: " <& pi(100000000) digits 5);
|
||||
end func;
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
#import std
|
||||
#import flo
|
||||
|
||||
mcp "n" = times/4. div\float"n" (rep"n" (fleq/.5+ sqrt+ plus+ ~~ sqr+ minus/.5+ rand)?/~& plus/1.) 0.
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
#cast %eL
|
||||
|
||||
pis = mcp* <10,100,1000,10000,100000,1000000>
|
||||
21
Task/Monte-Carlo-methods/XPL0/monte-carlo-methods.xpl0
Normal file
21
Task/Monte-Carlo-methods/XPL0/monte-carlo-methods.xpl0
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
code Ran=1, CrLf=9;
|
||||
code real RlOut=48;
|
||||
|
||||
func real MontePi(N); \Calculate pi using Monte Carlo method
|
||||
int N; \number of randomly selected points
|
||||
int I, X, Y, C;
|
||||
def R = 10000; \radius of circle
|
||||
[C:= 0; \initialize count of points in circle
|
||||
for I:= 0 to N-1 do
|
||||
[X:= Ran(R);
|
||||
Y:= Ran(R);
|
||||
if X*X + Y*Y <= R*R then C:= C+1;
|
||||
];
|
||||
return float(C)*4.0 / float(N); \Acir/Asqr = pi*R^2/4*R^2 = pi/4
|
||||
];
|
||||
|
||||
[RlOut(0, MontePi( 100)); CrLf(0);
|
||||
RlOut(0, MontePi( 10_000)); CrLf(0);
|
||||
RlOut(0, MontePi( 1_000_000)); CrLf(0);
|
||||
RlOut(0, MontePi(100_000_000)); CrLf(0);
|
||||
]
|
||||
Loading…
Add table
Add a link
Reference in a new issue