3 use iso_c_binding,
only : c_int, c_float
4 use iso_fortran_env,
only : int64, real128
7 integer (int64) ::
x = 1234567890987654321_int64
8 integer (int64) ::
y = 362436362436362436_int64
9 integer (int64) ::
z = 1066149217761810_int64
10 integer (int64) ::
c = 123456123456123456_int64
110 integer (kind=c_int),
optional :: seed
111 integer (int64) :: indx
112 integer (int64) :: pseudorandom_value
114 x = 1234567890987654321_int64
115 y = 362436362436362436_int64
116 z = 1066149217761810_int64
117 c = 123456123456123456_int64
119 if (
present(seed))
then
133 real (c_float) :: unif
137 real (real128) :: range
139 range = 2.0_real128 * real(huge(1_int64), kind=real128)
142 unif = ( real(
x, kind=real128) + real(huge(1_int64), kind=real128)) / range
150 integer (int64) ::
x, k
153 m = ieor(
x, ishft(
x,k))
171 integer (int64) :: pseudorandom_value
183 z = 6906969069_int64 *
z + 1234567
184 pseudorandom_value =
x +
y +
z
integer(int64) function shift_bits(x)
real(c_float) function kiss64_uniform_rng()
integer(int64) function kiss64_rng()
subroutine kiss64_initialize(seed)
integer(int64) function bitwise_exclusive_or_operation(x, k)