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
ありがとう。
練習ですか?実際の使用のために、そこに良いライブラリがあるからです。 –
"は前の10000からちょうど2つの値を取ります。文字通り、10000の値を配列に保存します。あなたは2つを選ぶためにどのような基準を使いますか?なぜそれをそうしたいのですか? – agentp