%RANDOM% 和 Math.random() 在随机性方面的区别
Difference between %RANDOM% and Math.random() in terms of randomness
我有一个混合 batch/jscript 文件(使用 cscript
),它必须从文本文件中随机选择一个引用。所以,我需要一些 RNG 来调用,它足够随机,以使结果不会在会话之间重复太多而无法注意到。
我们都知道 %RANDOM%
不是很好,但我注意到连续多次执行 %RANDOM%
(在同一会话中)会得到更令人满意的结果。
这是真的还是我最好使用下面的 JScript?
function getRandomNumber(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
WScript.echo(getRandomNumber(0, 32767));
如果 调用 %RANDOM%
两次与调用 getRandomNumber
函数之间存在显着 统计 差异一次,我洗耳恭听
JavaScript 的内置随机数生成器因引擎实现而异。在不了解底层生成器的情况下很难说什么。 %RANDOM%
也是如此 - 但它可能是作为 linear congruential generator (LCG). Searching on the web you can easily find forum posts about %RANDOM%
实现的,这也表明它是作为 LCG 实现的,它通常具有非常糟糕的统计属性。
现在的问题是 Math.random()
表现好还是不好?它也可以作为 LCG 实现,较新的实现(如 Google V8、Microsoft Edge)但是将其实现为 xorshift 的变体。如果您知道您使用的 JavaScript 引擎,您可以轻松找出生成器的类型,这样您还可以找到有关其统计质量的信息。
作为黄金标准,您还可以在 Diehard and TestU01 等繁重的统计测试套件中比较这两个生成器,我认为这对您的目的来说太过分了。
作为最后的建议,如果我不得不在不知道它们的情况下在两者之间做出选择,我会选择 JavaScript 生成器。如果作为LCG实现的话,那估计真的不比%RANDOM%
差,
否则更好。
但是,嘿,您不必在两个可能有问题的生成器之间做出选择:使用自定义生成器!检查 this page 可以移植到 JavaScript 的简单、现代、高质量的生成器。
我有一个混合 batch/jscript 文件(使用 cscript
),它必须从文本文件中随机选择一个引用。所以,我需要一些 RNG 来调用,它足够随机,以使结果不会在会话之间重复太多而无法注意到。
我们都知道 %RANDOM%
不是很好,但我注意到连续多次执行 %RANDOM%
(在同一会话中)会得到更令人满意的结果。
这是真的还是我最好使用下面的 JScript?
function getRandomNumber(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
WScript.echo(getRandomNumber(0, 32767));
如果 调用 %RANDOM%
两次与调用 getRandomNumber
函数之间存在显着 统计 差异一次,我洗耳恭听
JavaScript 的内置随机数生成器因引擎实现而异。在不了解底层生成器的情况下很难说什么。 %RANDOM%
也是如此 - 但它可能是作为 linear congruential generator (LCG). Searching on the web you can easily find forum posts about %RANDOM%
实现的,这也表明它是作为 LCG 实现的,它通常具有非常糟糕的统计属性。
现在的问题是 Math.random()
表现好还是不好?它也可以作为 LCG 实现,较新的实现(如 Google V8、Microsoft Edge)但是将其实现为 xorshift 的变体。如果您知道您使用的 JavaScript 引擎,您可以轻松找出生成器的类型,这样您还可以找到有关其统计质量的信息。
作为黄金标准,您还可以在 Diehard and TestU01 等繁重的统计测试套件中比较这两个生成器,我认为这对您的目的来说太过分了。
作为最后的建议,如果我不得不在不知道它们的情况下在两者之间做出选择,我会选择 JavaScript 生成器。如果作为LCG实现的话,那估计真的不比%RANDOM%
差,
否则更好。
但是,嘿,您不必在两个可能有问题的生成器之间做出选择:使用自定义生成器!检查 this page 可以移植到 JavaScript 的简单、现代、高质量的生成器。