Excel 2007 と Excel 2003 の RAND 関数について

文書翻訳 文書翻訳
文書番号: 828795 - 対象製品
すべて展開する | すべて折りたたむ

目次

概要

この資料では、Microsoft Office Excel 2007 と Microsoft Office Excel 2003 の乱数ジェネレータ RAND で使用される、変更されたアルゴリズムについて説明します。

詳細

以前のバージョンの Excel の RAND 関数で使用されていた擬似乱数ジェネレータ アルゴリズムは、標準の乱数テストでのパフォーマンスが不十分でした。この影響を受けるのは、RAND の呼び出しを多数回 (たとえば 100 万回以上) 実行する必要があるユーザーのみであり、大多数のユーザーにとっては問題にならない可能性が高いのですが、この資料で説明する擬似乱数ジェネレータ アルゴリズムは、Excel 2003 で初めて実装されました。このアルゴリズムは、同じ一連の標準の乱数テストに合格しています。

その一連の乱数テストは Diehard という名前で呼ばれています (注 1 参照)。Excel 2003 で実装されているアルゴリズムは、B.A. Wichman と I.D. Hill によって開発されました (注 2、注 3 参照)。この乱数ジェネレータは、米国保健社会福祉省の監察総監室が提供する RAT-STATS ソフトウェア パッケージでも使用されています。このアルゴリズムは、Diehard テストや、米国標準技術局 (NIST。以前の米国規格基準局) によって開発された追加のテストに合格することが、Rotz 他によって証明されています (注 4 参照)。

  • Diehard テストは Florida State University の統計学部の George Marsaglia 教授によって開発されたもので、次の Web サイトから入手できます。
    http://www.csis.hku.hk/~diehard
  • 「Algorithm AS 183: An Efficient and Portable Pseudo-Random Number Generator」 (Wichman, B.A. および I.D. Hill 著、『Applied Statistics』第 31 巻、188 〜 190 ページ、1982 年)
  • 「Building a Random-Number Generator」 (Wichman, B.A. および I.D. Hill 著、『BYTE』127 〜 128 ページ、1987 年 3 月)
  • 「A Comparison of Random Number Generators Used in Business」 (Rotz, W.、Falk, D. Wood、および J. Mulrow、2001 年、ジョージア州アトランタ、共同統計学会議での講演)
[0,1] の 3 つの乱数を取り出し、その 3 つを合計すると、合計の小数部分自体が [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] の 3 つの乱数を取り出し、その 3 つを合計すると、合計の小数部分自体が [0,1] の乱数である、という原則です。

RAND が生成するのは擬似乱数なので、長い数列を生成した場合、いずれは、生成される数列は既に生成された数列の繰り返しになります。Wichman-Hill 法で示されるような乱数を組み合わせることにより、繰り返しが始まるまでに 10 の 13 乗を超える個数の乱数が生成されることが保証されます。以前のバージョンの RAND で、Diehard テストのいくつかで結果が基準に達しなかったのは、数の繰り返しが始まるまでのサイクルが許容できないほど短かったためです。

以前のバージョンの Excel の計算結果

以前のバージョンの Excel の RAND 関数は、非常に長い乱数列 (たとえば 100 万個) を必要としているわけではないユーザーにとっては、実際、差し支えはありませんでした。この RAND 関数は、標準の乱数テストのいくつかに失敗し、非常に長い乱数列が必要な場合にはパフォーマンスに問題がありました。

Excel 2003 の計算結果

単純で効果的なアルゴリズムが実装されました。新しい乱数ジェネレータは、標準の乱数テストのすべてに合格しています。

まとめ

非常に長い乱数列を生成する必要があり、RAND の使用回数が非常に多いユーザーは、Excel 2003 の新しいジェネレータを使用する方が賢明です。その他のユーザーは、以前のバージョンの Excel の RAND を使用しても差し支えはありません。

関連情報

RAND で発生する問題について既に記載されている情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
834520 [XL2003] Excel 2003 で RAND 関数の使用時に負の値が返される

プロパティ

文書番号: 828795 - 最終更新日: 2007年2月21日 - リビジョン: 5.0
この資料は以下の製品について記述したものです。
  • Microsoft Office Excel 2007
  • Microsoft Office Excel 2003
キーワード:?
kbfuncstat kbfunctions kbinfo KB828795
"Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。"

フィードバック

 

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