我在nodejs中进行了这个简单的测试,我让它在一夜之间运行,无法重复Math.random().我意识到价值(或甚至整个序列)迟早会重复,但对它何时会发生有什么合理的期望?
let v = {};
for (let i = 0;; i++) {
let r = Math.random();
if (r in v) break;
v[r] = r;
}
console.log(i);
Run Code Online (Sandbox Code Playgroud) 是否有任何关于Math.random应该产生多少随机位的要求?我对Chrome和Firefox的实现进行了一些测试,将结果转换为十六进制以检查位,Firefox 27.0.1给出了类似的结果
0x1.de619579d56f3p-1
0x1.ef1ada9306decp-2
0x1.df3b75e208ce6p-1
Run Code Online (Sandbox Code Playgroud)
而Chrome版本33.0.1750.154米给出
0x1.1190f39c00000p-2
0x1.b959e3b600000p-1
0x1.90f614b400000p-2
Run Code Online (Sandbox Code Playgroud)
相比之下,这是一个神圣的.它似乎是一个32位的结果,而Firefox的值似乎使用53个随机位.