如何在[0,5]范围内的fortran 90中生成整数随机数?

时间:2014-04-14 10:01:27

标签: random numbers integer fortran

我在fortran prramming中有点新鲜。 任何人都可以帮我解决这个问题。 我有生成整数随机数的问题 在fortran随机数范围[0,5]中使用 random_seed和rand

2 个答案:

答案 0 :(得分:4)

怎么样:

program rand_test
  use,intrinsic :: ISO_Fortran_env
  real(REAL32)  :: r(5)
  integer       :: i(5)

  ! call init_random_seed() would go here

  call random_number(r)

  ! Uniform distribution requires floor: Thanks to @francescalus 
  i = floor( r*6._REAL32 )

  print *, i
end program

答案 1 :(得分:4)

为了支持Alexander Vogt的answer,我将概括。

内在random_number(u)在区间[0,1]上从均匀分布返回实数u(或其数组)。 [也就是说,它包括0而不是1。]

要在整数{n,n + 1,...,m-1,m}上进行离散均匀分布,将连续分布分割成m + 1-n个相等大小的块,将每个块映射到整数。一种方法可能是:

call random_number(u)
j = n + FLOOR((m+1-n)*u)  ! We want to choose one from m-n+1 integers

正如您所看到的,对于{0,1,2,3,4,5}的初始问题,这将减少为

call random_number(u)
j = FLOOR(6*u)            ! n=0 and m=5

以及评论中的另一个案例{-1,0,1}

call random_number(u)
j = -1 + FLOOR(3*u)       ! n=-1 and m=1

当然,非连续整数集需要进行其他变换,并且应该注意数值问题。