Monte Carlo methods: Difference between revisions

Content added Content deleted
m (→‎ES6: Slight rearrangement)
Line 956: Line 956:


// monteCarloPi :: Int -> Float
// monteCarloPi :: Int -> Float
const monteCarloPi = n => {
const monteCarloPi = n =>
4 * range(1, n)
.reduce(a => {
const [x, y] = [rnd(), rnd()];
return x * x + y * y < 1 ? a + 1 : a;
}, 0) / n;


const rnd = Math.random;


// GENERIC FUNCTIONS
return 4 * range(1, n)
.reduce(a => {
const [x, y] = [rnd(), rnd()];
return x * x + y * y < 1 ? a + 1 : a;
}, 0) / n;
}


// range :: Int -> Int -> [Int]
// range :: Int -> Int -> [Int]
Line 972: Line 971:
length: Math.floor(n - m) + 1
length: Math.floor(n - m) + 1
}, (_, i) => m + i);
}, (_, i) => m + i);

// rnd :: () -> Float
const rnd = Math.random;



// TEST
// TEST
Line 977: Line 980:
.map(_ => monteCarloPi(10000000));
.map(_ => monteCarloPi(10000000));


// e.g. -> [3.141368, 3.1408992, 3.1412084, 3.142132, 3.1413012]
// e.g. -> [3.1413288, 3.1409792, 3.141154, 3.1415712, 3.1416284]
})();</lang>
})();</lang>


{{Out}} (5 sample runs)
{{Out}} (5 sample runs)
<lang JavaScript>[3.141368, 3.1408992, 3.1412084, 3.142132, 3.1413012]</lang>
<lang JavaScript>[3.1413288, 3.1409792, 3.141154, 3.1415712, 3.1416284]</lang>


=={{header|Julia}}==
=={{header|Julia}}==