Delphi中随机函数的可靠性如何

Dai*_*tsu 12 delphi random mersenne-twister delphi-6

我正在编写一个用Delphi编写统计测试的程序(必须是Delphi),我听说随机功能有些奇怪.当程序启动时,你必须调用randomize来随机化随机函数的种子.

我想知道随机函数(在调用randomize之后)是否足够随机进行统计测试或是否需要使用Mersenne twister?有没有人对随机的实际实现有任何了解,这可以告诉我这有多重要?

Bar*_*lly 20

与几乎所有编程语言RTL PRNG一样,Delphi的PRNG是一个线性同余生成器.

这对于大多数小规模的东西来说已经足够了,但有些事情需要注意.特别要注意低阶位:乘法和加法的模式意味着低阶位根本不是非常随机的.但这通常仅适用于拉出的大32位值,然后用mod或类似地截断.使用Random(10)0到9之间的值来内部使用整个32位范围的乘法而不是mod操作.


Mic*_*ick 16

替代文字

我无法抗拒.

  • 我喜欢幽默.但它必须**是CW! (2认同)
  • 我很乐意与人们一起投票.我没有权力将其作为社区维基.投票上/下,我真的不介意......我不想尝试游戏SO的声誉系统. (2认同)

Van*_*mex 6

如果您正在寻求一种以最快的执行时间保证随机数的唯一性的方法,那么About.com已经对最快的唯一随机数生成器提出了挑战,并且Patrick van Logchem的实施已被选为获胜者.


Phi*_*hiS 6

是否Random对您的统计测试足够可靠取决于您打算使用它的上下文.

话虽如此,我已经编写了几段需要进行适当统计的Delphi代码,并且已经用于Random获取各种空分布,数据伪复制和重采样.到目前为止,我没有在我自己的代码中遇到任何Random可能产生偏差或不可靠结果的情况,或者结果会阻止其用于预期的统计测试.但对于我的代码而言,并不一定要适用于你的代码.

如果有疑问,您当然可以统计分析调用的结果Random(例如在R,SPSS等中),并检查结果的分布是否违反了您的特定统计测试的分布要求.[如果你是一名合适的科学家,那么你应该做的就是这样.]

您是否需要其他PRNG - 例如TPMath库包含一些.(对于更多涉及的事情,还可以选择通过Delphi从R调用精细的统计函数.)