2017-10-14 5 views
0

私は10000の擬似ランダム値を端末に出力する線形合同ジェネレータをプログラムしました。これはモジュールの一部であり、したがってそれ自身の機能です。今度は、2つのランダムに一様に分布した数を取り、それをボックスマラー法で使用して2つの数を生成する新しい関数を書きたいと思う。私はボックスマラーの部品そのものを理解していますが、これまでの10000からわずか2つの値を取るようにプログラムする方法は分かりません。ここに私のコード:10000の値を生成する別の関数の2つの値を使用する関数の記述方法は?

module rng 
    implicit none 

    integer, parameter :: dp = selected_real_kind(15,300) 
    real(kind=dp) :: A=100, B= 104001, M = 714025 

contains 

function lcg(seed) 
    integer :: lcg 
    integer, optional, intent(in) :: seed 
    real(kind=dp) :: x = 0 

    if(present(seed)) x = seed 
    x = mod(A * x + B, M) 
    lcg = x 
end function 

end module 


program lcgtest 
    use rng 
    implicit none 
    integer :: N 


    do N = 1, 10000 
    print *, lcg() 
    end do 
end program 

ありがとう。

+0

練習ですか?実際の使用のために、そこに良いライブラリがあるからです。 –

+0

"は前の10000からちょうど2つの値を取ります。文字通り、10000の値を配列に保存します。あなたは2つを選ぶためにどのような基準を使いますか?なぜそれをそうしたいのですか? – agentp

答えて

1

この関数は1000ではなく1の整数を生成します.2回呼び出すと2つの数値があります。

do 
    a = lcg() 
    b = lcg() 

    !do something with a and b 
end do 
関連する問題