emf wrote:
^^^
It is considered polite here to post using one’s real name.
> function random(top) {
> var now '= new Date();
Syntax error, see below.
> var tim = now.getTime();
> var 4rhdm;
Unused variable. Use JSHint: <
https://en.wikipedia.org/wiki/JSHint> p.
> if (top != 0) {
> rndm = (tim % top) + 1;
> } else {
> rndm = 0; // garbage in, garbage out
> }
> return rndm;
> }
>
> […]
> I do not know how Math.random() gets its pseudorandom results,
Presumably (the equivalent of) /dev/random.
> but I am sure this function's results should be better.
You are wrong. *Dead* wrong. And the fact that you did not realize it does
not bode well for your being able to create a good PRNG.
> What do you think about using centiseconds?
Even greater nonsense, see below.
Using the modulo operation (“%”) on a *predictably* increasing numeric value
like the return value of “new Date().getTime()” anywhere in a generator will
get you *predictably* consecutive results belonging to *neighboring*
equivalence classes in a modulus ring. So there is _nothing_ *random* about
it.
For example:
 > var input = Array.apply(null, {length: 10}).map(function (e, i) {
 return i;
 });
 > input
 < [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

 > input.map(function (e) { return e % 3; })
 < [0, 1, 2, 0, 1, 2, 0, 1, 2, 0]
Here the modulus ring is
[0]
/ \
[2][1]
whereas [0] means the equivalence class to which all e’s belong for which
e ≡ 0 (mod 3)
holds; obviously, e ∈ {3n  n ∈ ℤ}. ¹)
With your modification, it is just
 > input.map(function (e) { return (e % 3) + 1; })
 < [1, 2, 3, 1, 2, 3, 1, 2, 3, 1]
[1]
/ \
[3][2]
instead.
Obviously, if the dividend of Euclidean division is much greater than the
divisor (which is the modulus), or the divisor is not much less than the
dividend, it gets only worse:
 > Array.apply(null, {length: 10}).map(function () {
 return new Date().getTime();
 }).map(function (e) { return (e % 3) + 1; })
 [2, 2, 3, 3, 3, 3, 3, 3, 3, 3]
And with centiseconds it is even worse:
 > Array.apply(null, {length: 10}).map(function () {
 return Math.round(new Date().getTime() / 10);
 }).map(function (e) { return (e % 3) + 1; })
 [3, 3, 3, 3, 3, 3, 3, 3, 3, 3]
Very random, indeed :>
<
https://en.wikipedia.org/wiki/Modulo_operation>
<
https://en.wikipedia.org/wiki/Congruence_relation>
> […]
>  '
Your “'” key is borked.
_____
¹) BTW, Chrome Dev Tools appear to be able now to tell 0 and −0 apart.
Enter “0” or “1 % 1”: the result should be “0”, not “0”.