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

文章翻译 文章翻译
文章编号: 828795 - 查看本文应用于的产品
展开全部 | 关闭全部

本文内容

概要

本文说明一种经修改的算法,此算法在 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 教授开发,并且可在以下网站上找到:
    http://www.csis.hku.hk/~diehard
  • 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 ENTRY

IX = 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 知识库中相应的文章:
834520 Excel 2003 中的 RAND 函数返回负数

属性

文章编号: 828795 - 最后修改: 2007年2月2日 - 修订: 5.0
这篇文章中的信息适用于:
  • Microsoft Office Excel 2007
  • Microsoft Office Excel 2003
关键字:?
kbinfo kbfunctions kbfuncstat KB828795
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com