我在fortran prramming中有点新鲜。 任何人都可以帮我解决这个问题。 我有生成整数随机数的问题 在fortran随机数范围[0,5]中使用 random_seed和rand
答案 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
当然,非连续整数集需要进行其他变换,并且应该注意数值问题。