【发布时间】:2019-03-30 19:38:45
【问题描述】:
我在 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);
【问题讨论】:
-
这里可能会回答它:hackernoon.com/…
-
您的代码的一个问题是 Math.random() 在当前时间播种,因此即使 / 当它最终找到重复项时,您的结果也无法重复。
-
我的意思是......它是旨在随机的,而不是看似随机数字的重复序列。我不希望它开始重复......除非我误解了什么......
-
那你有一个 X Y 问题。使用 UUID 或始终递增的时钟值,当 Date().valueOf() 返回不同的值时重置。 UUID 有一个涉及“机器 ID”的方案,这是一个本地时间源,可以在很长一段时间内为您提供唯一值。
-
@RyanTheLeach - 我现在明白了。我没有仔细查看您的代码,并认为您正在寻找顺序重复,而不仅仅是任何一个重复值。令人印象深刻的是,它在一夜之间没有找到重复项,尽管到晚上结束时,我想知道单次检查需要多长时间才能遍历您在
v中记录的每个值——它可能已经显着减慢.. .
标签: javascript node.js random