我编写了一个线性同余生成器,可以向终端输出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
感谢。
答案 0 :(得分:1)
你的函数生成1个整数,而不是1000.只需调用它两次,你就有两个数字。
do
a = lcg ()
b = lcg ()
!do something with a and b
end do