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

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

针对 Office 2003 的支持已终止

Microsoft 已于 2014 年 4 月 8 日终止了针对 Office 2003 的支持。该更改已影响到您的软件更新和安全选项。 了解这一措施对于您的含义以及如何继续保持受保护状态。

概要
本文说明一种经修改的算法,此算法在 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
反馈
t/javascript" src="https://c.microsoft.com/ms.js">