你目前正处于脱机状态,正在等待 Internet 重新连接

Excel 2007 和 Excel 2003 中 RAND 函数的说明

Support for Office 2003 has ended

Microsoft ended support for Office 2003 on April 8, 2014. This change has affected your software updates and security options. Learn what this means for you and how to stay protected.

概要
本文说明一种经修改的算法,此算法在 Microsoft Office Excel 2007 和 Microsoft Office Excel 2003 中的随机数生成器函数 RAND 中使用。
更多信息
早期版本的 Excel 中的 RAND 函数使用伪随机数生成算法,其性能在随机性标准测试中并不够好。虽然这可能只会影响那些要调用 RAND 非常多次(例如一百万次或更多)的用户,并且对于几乎所有用户都不构成问题,但本文所述的伪随机数生成算法是首先为 Excel 2003 实现的。它通过了相同的一系列标准测试。

这一系列测试称为 Diehard(参阅附注 1)。在 Excel 2003 中实现的算法由 B.A. Wichman 和 I.D. Hill(参阅附注 2 和附注 3)开发。此随机数生成器也用在 RAT-STATS 软件包中,该软件包由美国健康和人类服务部的监察长办公室提供。Rotz 等人(参阅附注 4)表示,此算法通过了 DIEHARD 测试和其他由美国国家标准与技术协会(NIST,以前称为美国国家标准局)开发的测试。

附注

  • 这些测试由佛罗里达州州立大学统计系的 George Marsaglia 教授开发,并且可在以下网站上找到:
  • Wichman, B.A. 和 I.D. Hill,Algorithm AS 183:An Efficient and Portable Pseudo-Random Number Generator,《Applied Statistics》,31,188-190,1982。
  • Wichman, B.A. 和 I.D. Hill,Building a Random-Number Generator,BYTE,第127-128 页,1987 年 3 月。
  • Rotz, W. 和 E. Falk,D. Wood 和 J. Mulrow,A Comparison of Random Number Generators Used in Business,发表于 2001 年在佐治亚州亚特兰大市举行的“统计学联合会议”上。
基本的构思是,如果您在 [0,1] 中取出三个随机数并将它们加总,则总和的小数部分本身就是 [0,1] 中的随机数。Wichman 和 Hill 原文中列出的 Fortran 代码关键语句是:
C	IX, IY, IZ SHOULD BE SET TO INTEGER VALUES BETWEEN 1 AND 30000 BEFORE FIRST ENTRYIX = MOD(171 * IX, 30269)IY = MOD(172 * IY, 30307)IZ = MOD(170 * IZ, 30323)RANDOM = AMOD(FLOAT(IX) / 30269.0 + FLOAT(IY) / 30307.0 + FLOAT(IZ) / 30323.0, 1.0)
因此,IX、IY、IZ 分别生成介于 0 和 30268、0 和 30306 以及 0 和 30322 之间的整数。它们在最后一个语句中组合起来,以实现前面表述的简单原理:如果您在 [0,1] 中取出三个随机数并将它们加总,则总和的小数部分本身就是 [0,1] 中的随机数。

由于 RAND 产生伪随机数,因此,如果产生序列很长的伪随机数,则序列本身最终将会重复。如 Wichman-Hill 过程那样组合随机数可保证在开始重复之前生成超过 10^13 个数字。早期版本的 RAND 在几项 Diehard 测试中的结果不尽如人意,原因是在数字开始重复之前所经过的周期短得不能让人接受。

早期版本的 Excel 中的结果

实际上,早期版本的 Excel 中的 RAND 函数对于不需要很长随机数序列(例如一百万个)的用户是很好的。它未能通过几项随机性标准测试,使得它的性能在需要很长随机数序列时构成问题。

Excel 2003 中的结果

实现了简单和有效的算法。新的生成器通过了所有随机性标准测试。

结束语

需要很长随机数序列的 RAND 高级用户使用 Excel 2003 的新生成器会取得较好效果。其他用户可以继续使用早期版本的 Excel 中的 RAND。
参考
有关已记载的在 RAND 中发生的问题的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
834520Excel 2003 中的 RAND 函数返回负数
属性

文章 ID:828795 - 上次审阅时间:02/02/2007 18:07:00 - 修订版本: 5.0

Microsoft Office Excel 2007, Microsoft Office Excel 2003

  • kbinfo kbfunctions kbfuncstat KB828795
反馈