2017-10-14 71 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的值」。從字面上看,您可以將10000個值保存在一個數組中。你用什麼標準來挑選這兩個?你爲什麼要這樣做? – agentp

回答

1

你的函數產生1個整數,而不是1000.只需調用它兩次,你就有兩個數字。

do 
    a = lcg() 
    b = lcg() 

    !do something with a and b 
end do 
相關問題