mtprng_rand_real1(3f) - [M_random:MERSENNE TWISTER] Obtain a pseudo-random real number in the range [0.0,1.0]
(LICENSE:CUSTOM OPEN)
function mtprng_rand_real1(state) result(r)
type(mtprng_state), intent(inout) :: state
real(IEEE64) :: r
Obtain a pseudo-random real number in the range [0,1], i.e., a number
greater than or equal to 0 and less than or equal to 1.
state generator state initialized by mtprng_init(3f) or mtprng_init_array(3f)
r ...
Sample program:
program demo_mtprng_real1
use M_random, only : mtprng_init
use M_random, only : mtprng_state
use M_random, only : mtprng_rand_real1
use, intrinsic :: iso_fortran_env, only : int32
implicit none
integer(INT32) :: seed
type(mtprng_state) :: state
GET_SEED: block
integer :: count
integer :: count_rate
call system_clock(count, count_rate)
seed = count
endblock GET_SEED
call mtprng_init(seed, state)
write(*,*) mtprng_rand_real1(state)
end program demo_mtprng_real1
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(mtprng_state), | intent(inout) | :: | state |
function mtprng_rand_real1(state) result(r) ! ident_13="@(#) M_random mtprng_rand_real1(3f) Obtain a pseudo-random real number .ge. 0 and .le.= 1." ! arguments type(mtprng_state), intent(inout) :: state ! return type real(IEEE64) :: r ! Local constant; precalculated to avoid division below real(IEEE64), parameter :: factor = 1.0_IEEE64 / 4294967295.0_IEEE64 ! compute r = real(mtprng_rand64(state),IEEE64) * factor end function mtprng_rand_real1