您目前已離線,請等候您的網際網路重新連線

說明 Excel 2007 與 Excel 2003 中的 RAND 函數

Office 2003 支援已結束

Microsoft 於 2014 年 4 月 8 日結束對 Office 2003 的支援。此變更已影響您的軟體更新和安全性選項。 瞭解這對您的意義為何且如何持續受保護。

結論
本文將告訴您,在 Microsoft Office Excel 2007 與 Microsoft Office Excel 2003 中亂數產生器函數所使用的改良演算法。
其他相關資訊
舊版 Excel 中的 RAND 函數使用虛擬亂數產生演算法,但這種演算法在標準隨機測試中的效能不佳。雖然這可能只會影響大量呼叫 RAND 的使用者 (例如呼叫上百萬次),其他使用者幾乎都沒有這個顧慮,但是此處所提及的虛擬亂數產生演算法原先是為 Excel 2003 而實作,現在已通過相同系列的標準測試。

此測試系列名為 Diehard (請參閱附註 1)。Excel 2003 中實作的這個演算法是由 B.A. Wichman 與 I.D. Hill 所開發 (請參閱附註 2 及附註 3)。美國保健福利部 (健康及民眾服務部) (U.S. Department of Health and Human Services) 的督察長室 (Office of the Inspector) 所提供的 RAT-STATS 軟體套件也是使用此亂數產生器。Rotz 等人 (請參閱附註 4) 已證實它已通過 DIEHARD 測試,以及前身為國家標準局的國家標準及技術機構 (National Institute of Standards and Technology,NIST) 所開發的其他測試。

附註

  • 這些測試是由佛羅里達州立大學統計學系的 George Marsaglia 教授所開發,可以從下列網站取得:
  • Wichman, B.A. and I.D. Hill, Algorithm AS 183:An Efficient and Portable Pseudo-Random Number Generator, Applied Statistics, 31, 188-190, 1982.
  • Wichman, B.A. and I.D. Hill, Building a Random-Number Generator, BYTE, pp.127-128, March 1987.
  • Rotz, W. and E. Falk, D. Wood, and J. Mulrow, A Comparison of Random Number Generators Used in Business, presented at Joint Statistical Meetings, Atlanta, GA, 2001.
基本概念是取自 [0,1] 上的三個亂數再加總,總和的分數部分本身就是 [0,1] 的亂數。Wichman 與 Hill 原文中所列 Fortan 程式碼的關鍵陳述式如下:
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 知識庫」中的文件:
834520The RAND function returns negative numbers in Excel 2003
內容

文章識別碼:828795 - 最後檢閱時間:03/16/2007 10:40:53 - 修訂: 5.0

Microsoft Office Excel 2007, Microsoft Office Excel 2003

  • kbfuncstat kbfunctions kbinfo KB828795
意見反應