22 use,
intrinsic :: iso_fortran_env
39 integer(int64),
parameter,
public :: &
40 splitmix64_123 = int(z
'B4DC9BD462DE412B', int64), &
54 integer(int64),
intent(inout) :: x
59 x = ieor(x, shiftl(x, 13))
60 x = ieor(x, shiftr(x, 7))
61 x = ieor(x, shiftl(x, 17))
75 integer(int64),
intent(in) :: x
77 real(real64),
parameter :: two_pow_minus_53 = real(z
'3CA0000000000000', real64)
79 d = real(shiftr(x, 11), real64) * two_pow_minus_53
85 integer(int64),
intent(inout) :: iseed
86 real(real64),
intent(out) :: rnd
97 integer(int64),
intent(inout) :: iseed
98 integer,
intent(in) :: nn
99 real(real64),
intent(inout) :: rnd(:)
103 push_sub(quickrnd_array)
109 pop_sub(quickrnd_array)
116 integer(int64),
intent(inout) :: iseed
117 integer,
intent(in) :: nn
118 complex(real64),
intent(inout) :: rnd(:)
120 real(real64),
parameter :: inv_sqrt2 = 1.0_real64 /
sqrt(
m_two)
121 real(real64) :: re, im
124 push_sub(quickrnd_array)
129 rnd(ii) = cmplx(re, im, real64) * inv_sqrt2
132 pop_sub(quickrnd_array)
139 integer(int64),
intent(inout) :: iseed
140 integer(int64),
intent(in) :: n
142 integer(int64) :: discard
167 integer(int64),
intent(in ) :: x_min, x_max
168 integer(int64),
intent(inout) :: seed
171 integer(int64) :: range
173 assert(seed /= 0_int64)
175 if (seed < 0_int64) seed = -seed
176 range = x_max - x_min + 1_int64
177 rand = x_min + mod(seed, range)
188 integer(int32),
intent(in ) :: m
189 integer(int64),
intent(in ) :: n
190 integer(int64),
intent(inout) :: seed
191 integer(int64),
intent( out) :: values(:)
193 integer(int64),
allocatable :: indices(:)
194 integer(int64) :: i, j, temp
198 safe_allocate(indices(1:n))
207 indices(i) = indices(j)
209 values(i) = indices(i)
212 values(m) = indices(m)
213 safe_deallocate_a(indices)
double sqrt(double __x) __attribute__((__nothrow__
real(real64), parameter, public m_two
subroutine dquickrnd_array(iseed, nn, rnd)
real(real64) function to_double(x)
Generating uniform doubles in the unit interval.
integer(int64), parameter, public splitmix64_321
subroutine, public shiftseed(iseed, n)
integer(int64) function random_integer_in_range(x_min, x_max, seed)
Generate a random int64 in the range .
subroutine, public fisher_yates_shuffle(m, n, seed, values)
Return m random numbers from a range of with no replacement.
subroutine dquickrnd_single(iseed, rnd)
integer(int64) function xorshift64(x)
xorshift64 pseudorandom number generator
subroutine zquickrnd_array(iseed, nn, rnd)