Batch file %RANDOM%和Math.RANDOM()之间的随机性差异
我有一个混合的batch/jscript文件(使用Batch file %RANDOM%和Math.RANDOM()之间的随机性差异,batch-file,random,jscript,wsh,Batch File,Random,Jscript,Wsh,我有一个混合的batch/jscript文件(使用cscript),它必须从文本文件中随机选取一个引用。所以,我需要一些RNG来调用,这些RNG足够随机,以使结果不会在会话之间重复太多而无法注意到 我们都知道%RANDOM%并没有那么好,但我注意到,连续多次执行%RANDOM%(在同一个会话中)会得到更多令人满意的结果 这是真的还是我最好使用下面的JScript function getRandomNumber(min, max) { return Math.floor(Math.rando
cscript
),它必须从文本文件中随机选取一个引用。所以,我需要一些RNG来调用,这些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%
——不过它可能是作为(LCG)实现的。在网上搜索你可以很容易地找到,这也表明它是作为一个LCG实现的,一般来说,它的统计特性非常糟糕
现在的问题是Math.random()
的性能是否更好?它也可以实现为LCG,但较新的实现(如Google V8、Microsoft Edge)可以实现为的变体。如果您知道所使用的JavaScript引擎,那么您可以很容易地找到生成器的类型,从而也可以找到有关其统计质量的信息
作为金标准,您还可以在诸如和之类的大型统计测试套件中比较这两个生成器,我认为,这对于您来说是一种过分的做法
最后一个建议是,如果我不得不在不知道它们的情况下在两者之间进行选择,我会使用JavaScript生成器。如果它是作为LCG实现的,那么它可能并不比%RANDOM%
更糟糕,
否则就更好了
但是,嘿,你不必在两个潜在的坏生成器之间做出选择:使用一个自定义的生成器!检查可以移植到JavaScript的简单、现代、高质量的生成器。Hmm,这是很多(p)RNG材料。也许我不是在寻找技术深度(背景)的东西,但我在寻找关于上述情况的更直接/简单的答案例如:连续第二次执行%random%后得到的数字的随机性增加了多少?我不明白你的问题。您讨论的是批处理脚本(bat文件),然后是JavaScript。顺便说一句,您想要使用生成器的目的似乎并不需要如此高质量的统计随机性,也许
%RANDOM%
就足够了。哎呀,我很抱歉没有提到它。我使用的是混合批处理/jscript文件和cscript。不,%RANDOM%对于这一点来说太容易预测了(这就是为什么我要连续执行两次)。我只对运行%RANDOM%两次与调用getRandomNumber函数一次之间的统计差异感兴趣。天啊,天啊,plasmacel说话了(以什么方式!)。我相信你是最进化的等离子细胞。我对你回答的质量/水平感到敬畏更严肃地说:非常感谢你的努力。非常感谢!:-)