2017-10-14 4 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 값을 저장합니다. 두 가지를 고르기 위해 어떤 기준을 사용합니까? 왜 그렇게하고 싶습니까? – agentp

답변

1

이 함수는 1000이 아니라 1 개의 정수를 생성합니다.이 함수를 두 번 호출하면 두 개의 숫자가 생깁니다.

do 
    a = lcg() 
    b = lcg() 

    !do something with a and b 
end do 
관련 문제