I am trying to implement http://baagoe.com/en/RandomMusings/javascript/Alea.js onto a website so I can generate better random numbers, but I can’t seem to make it work. The documentation is here: http://baagoe.com/en/RandomMusings/javascript/
The documentation states to call the function like this:
var random = Alea();
random(); // returns 0.6198398587293923
but it doesn’t work.
Even just declaring var random = Alea(); breaks the JavaScript on the page. Is there something I am missing?
Here’s the full page I am testing it on:
<html>
<head>
<title>javascript test</title>
</head>
<body>
<h1>example</h1>
<script type="text/javascript">
// From http://baagoe.com/en/RandomMusings/javascript/
function Alea() {
return (function(args) {
// Johannes Baagøe <baagoe@baagoe.com>, 2010
var s0 = 0;
var s1 = 0;
var s2 = 0;
var c = 1;
if (args.length == 0) {
args = [+new Date];
}
var mash = Mash();
s0 = mash(' ');
s1 = mash(' ');
s2 = mash(' ');
for (var i = 0; i < args.length; i++) {
s0 -= mash(args[i]);
if (s0 < 0) {
s0 += 1;
}
s1 -= mash(args[i]);
if (s1 < 0) {
s1 += 1;
}
s2 -= mash(args[i]);
if (s2 < 0) {
s2 += 1;
}
}
mash = null;
var random = function() {
var t = 2091639 * s0 + c * 2.3283064365386963e-10; // 2^-32
s0 = s1;
s1 = s2;
return s2 = t - (c = t | 0);
};
random.uint32 = function() {
return random() * 0x100000000; // 2^32
};
random.fract53 = function() {
return random() +
(random() * 0x200000 | 0) * 1.1102230246251565e-16; // 2^-53
};
random.version = 'Alea 0.9';
random.args = args;
return random;
} (Array.prototype.slice.call(arguments)));
};
var random = Alea();
alert('test');
</script>
</body>
</html>
here
the problem was you did not include the Mash() function as described in the article under ‘Common implementation details’