how to generate integer random number in fortran 90 in the range [0,5]?

后端 未结 2 1366
天涯浪人
天涯浪人 2020-12-31 19:08

I am kind of new in the fortran proramming. Can anyone please help me out with the solution. i am having a problem of generating integer random number in the range [0,5] in

2条回答
  •  野趣味
    野趣味 (楼主)
    2020-12-31 19:18

    To support the answer by Alexander Vogt, I'll generalize.

    The intrinsic random_number(u) returns a real number u (or an array of such) from the uniform distribution over the interval [0,1). [That is, it includes 0 but not 1.]

    To have a discrete uniform distribution on the integers {n, n+1, ..., m-1, m} carve the continuous distribution up into m+1-n equal sized chunks, mapping each chunk to an integer. One way could be:

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

    As you can see, for the initial question for {0, 1, 2, 3, 4, 5} this reduces to

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

    and for the other case in your comment {-1, 0, 1}

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

    Of course, other transformations will be required for sets of non-contiguous integers, and one should pay attention to numerical issues.

提交回复
热议问题