XLPack 7.0
XLPack 数値計算ライブラリ (Excel VBA) リファレンスマニュアル
読み取り中…
検索中…
一致する文字列を見つけられません

◆ Lcong48()

Sub Lcong48 ( P() As  Integer)

乱数生成ルーチンのパラメータの設定, および, Drand48, Lrand48, Mrand48の初期化 (線形合同法)

目的
Rand48シリーズ乱数生成ルーチンの線形合同法のパラメータを設定する. また, Drand48, Lrand48 および Mrand48のシードを初期化する.
引数
[in]P()配列 P(6)
線形合同法 Xn+1 = (a*Xn + c) mod m におけるパラメータaおよびcを設定する(mは変更できない(= 2^48)). また, Drand48, Lrand48 および Mrand48が使用するシードを初期化する.
  P(0)〜P(2): シードの値.
  P(3)〜P(5): aの値. (デフォルト値 = 25214903917)
  P(6): cの値. (デフォルト値 = 11)
Lcong48で設定されたパラメータaおよびcはSeed48()またはSrand48()の呼び出しによりデフォルト値にリセットされる.
使用例
[0, 1)の実数の乱数を10個生成する. Lcong48を使用してパラメータを変更するとデフォルトのときと異なった乱数系列を生成する. Srand48()でシードを初期化するとパラメータもデフォルト値にリセットされる. Erand48()が使用するパラメータもSrand48()でリセットされる.
Sub Ex_Lcong48()
Dim P(6) As Integer, XSeed(2) As Integer, Seed As Long, I As Long
Seed = 13
Call Srand48(Seed)
XSeed(0) = &H330E: XSeed(1) = Seed Mod (2 ^ 16): XSeed(2) = Seed / (2 ^ 16)
P(0) = XSeed(0): P(1) = XSeed(1): P(2) = XSeed(2)
P(3) = &HE66D: P(4) = &HDEEC: P(5) = &H15: P(6) = 11 '-- default P(5) = &H5
Call Lcong48(P())
Debug.Print "Parameters changed"
For I = 1 To 10
Debug.Print Drand48(), Erand48(XSeed())
Next
XSeed(0) = &H330E: XSeed(1) = Seed Mod (2 ^ 16): XSeed(2) = Seed / (2 ^ 16)
Call Srand48(Seed)
Debug.Print "Parameters reset"
For I = 1 To 10
Debug.Print Drand48(), Erand48(XSeed())
Next
End Sub
Sub Lcong48(P() As Integer)
乱数生成ルーチンのパラメータの設定, および, Drand48, Lrand48, Mrand48の初期化 (線形合同法)
Function Erand48(Xseed() As Integer) As Double
区間[0,1)の48ビット実数乱数 (線形合同法)
Sub Srand48(Seed As Long)
Drand48, Lrand48, Mrand48の初期化 (32ビットシード) (線形合同法)
Function Drand48() As Double
区間 [0,1) の 48 ビット実数乱数 (線形合同法)
実行結果
Parameters changed
0.68217601750894 0.68217601750894
3.23807500276132E-02 3.23807500276132E-02
0.923458890562085 0.923458890562085
0.455927073812695 0.455927073812695
0.53016547731848 0.53016547731848
0.513544770641587 0.513544770641587
0.8044530201208 0.8044530201208
0.48267436264458 0.48267436264458
0.100180215892042 0.100180215892042
0.502789161459759 0.502789161459759
Parameters reset
0.49125804875894 0.49125804875894
0.909578015652613 0.909578015652613
0.696163968687085 0.696163968687085
0.922235667562695 0.922235667562695
0.42372016481848 0.42372016481848
0.593378755016587 0.593378755016587
0.1323338794958 0.1323338794958
0.45044780014458 0.45044780014458
0.269613809642042 0.269613809642042
0.820416114584759 0.820416114584759