>"The implementation first chooses the length of the number, then fills in the digits. This makes it biased towards smaller numbers."
Why?
Why?
Likewise with the full 100 digits this algorithm has a 1% chance of generating a number less than 10, while the correct proportion would be 1e-100.
The algorithm also does not generate numbers with zero in them (presumably to avoid leading zeroes, but this will skew results somewhat).
I think the correct algorithm would be to generate 100 digits and then remove the leading zeroes.
a = {}
for(let i = 0; i < 100000; i++){
let n = Math.floor(Math.random() * 10);
if( n in a )
a[n] += 1
else
a[n] = 1
}
My result:{ '0': 9917, '1': 10015, '2': 9957, '3': 10107, '4': 10019, '5': 10037, '6': 10120, '7': 9914, '8': 10042, '9': 9872 }
Today you learned: Node’s random number generator isn’t selecting from a real-life set of numerical data