mtprng_rand_real3 Function

public function mtprng_rand_real3(state) result(r)

NAME

mtprng_rand_real3(3f) - [M_random:MERSENNE TWISTER] Obtain a pseudo-random real number in the range (0< XXX <1)
(LICENSE:CUSTOM OPEN)

SYNOPSIS

 function mtprng_rand_real3(state) result(r)
 type(mtprng_state), intent(inout) :: state
 real(IEEE64) :: r

DESCRIPTION

Obtain a pseudo-random real number in the range (0,1), i.e., a number
greater than 0 and less than 1.

OPTIONS

state  generator state initialized by mtprng_init(3f) or mtprng_init_array(3f)

RETURNS

r      a pseudo-random real number greater than 0 and less than 1.

EXAMPLE

Sample program:

 program demo_mtprng_real3
 use M_random, only : mtprng_state, mtprng_init, mtprng_rand_real3
 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_real3(state)
 end program demo_mtprng_real3

Arguments

Type IntentOptional Attributes Name
type(mtprng_state), intent(inout) :: state

Return Value real(kind=IEEE64)


Source Code

function mtprng_rand_real3(state) result(r)

! ident_15="@(#) M_random mtprng_rand_real3(3f) Obtain a pseudo-random real number .gt. 0 and .lt. 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 / 4294967296.0_IEEE64

   r = (real(mtprng_rand64(state),IEEE64) + 0.5_IEEE64) * factor

end function mtprng_rand_real3