如何编写一个使用另一个函数的2个值生成10000个值的函数?

时间:2017-10-14 21:01:18

标签: fortran gfortran fortran90

我编写了一个线性同余生成器,可以向终端输出10000个伪随机值。这是模块的一部分,因此也是它自己的功能。我现在想要编写一个新函数,它接受2个随机均匀分布的数字,并在box muller方法中使用它们来生成2个以上的数字。我理解盒子muller部分本身,我只是不明白我如何编程它只从前一个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 

感谢。

1 个答案:

答案 0 :(得分:1)

你的函数生成1个整数,而不是1000.只需调用它两次,你就有两个数字。

do
  a = lcg ()
  b = lcg ()

  !do something with a and b
end do