Octopus
quickrnd_oct_m Module Reference

Data Types

interface  quickrnd
 

Functions/Subroutines

integer(int64) function xorshift64 (x)
 xorshift64 pseudorandom number generator More...
 
real(real64) function to_double (x)
 Generating uniform doubles in the unit interval. More...
 
subroutine dquickrnd_single (iseed, rnd)
 
subroutine dquickrnd_array (iseed, nn, rnd)
 
subroutine zquickrnd_array (iseed, nn, rnd)
 
subroutine, public shiftseed (iseed, n)
 
integer(int64) function random_integer_in_range (x_min, x_max, seed)
 Generate a random int64 in the range \( [x_{min}, x_{max}] \). More...
 
subroutine, public fisher_yates_shuffle (m, n, seed, values)
 Return m random numbers from a range of \([1, n]\) with no replacement. More...
 

Variables

integer(int64), parameter, public splitmix64_123 = int(Z'B4DC9BD462DE412B', int64)
 
integer(int64), parameter, public splitmix64_321 = int(Z'E95F1C4EFCF85DEE', int64)
 

Function/Subroutine Documentation

◆ xorshift64()

integer(int64) function quickrnd_oct_m::xorshift64 ( integer(int64), intent(inout)  x)
private

xorshift64 pseudorandom number generator

Marsaglia, G. (2003). Xorshift RNGs. Journal of Statistical Software, 8(14). https:

Parameters
[in,out]xPRNG state
Returns
next random number in the sequence

Definition at line 148 of file quickrnd.F90.

◆ to_double()

real(real64) function quickrnd_oct_m::to_double ( integer(int64), intent(in)  x)
private

Generating uniform doubles in the unit interval.

We consider x to be an unsigned 64-bit integer which can represent the range \([0,2^{64})\). First we shift x right by 11 places which puts it in the range \([0,2^{53})\). Then we convert it to a double and multiply by \(2^{-53}\) which puts the result in the range \([0,1)\).

https:

Parameters
[in]x64-bit integer
Returns
double precision floating point number in the interval [0,1)

Definition at line 169 of file quickrnd.F90.

◆ dquickrnd_single()

subroutine quickrnd_oct_m::dquickrnd_single ( integer(int64), intent(inout)  iseed,
real(real64), intent(out)  rnd 
)
private

Definition at line 179 of file quickrnd.F90.

◆ dquickrnd_array()

subroutine quickrnd_oct_m::dquickrnd_array ( integer(int64), intent(inout)  iseed,
integer, intent(in)  nn,
real(real64), dimension(:), intent(inout)  rnd 
)
private

Definition at line 191 of file quickrnd.F90.

◆ zquickrnd_array()

subroutine quickrnd_oct_m::zquickrnd_array ( integer(int64), intent(inout)  iseed,
integer, intent(in)  nn,
complex(real64), dimension(:), intent(inout)  rnd 
)
private

Definition at line 210 of file quickrnd.F90.

◆ shiftseed()

subroutine, public quickrnd_oct_m::shiftseed ( integer(int64), intent(inout)  iseed,
integer(int64), intent(in)  n 
)

Definition at line 233 of file quickrnd.F90.

◆ random_integer_in_range()

integer(int64) function quickrnd_oct_m::random_integer_in_range ( integer(int64), intent(in)  x_min,
integer(int64), intent(in)  x_max,
integer(int64), intent(inout)  seed 
)
private

Generate a random int64 in the range \( [x_{min}, x_{max}] \).

The function includes bias, where the per-value probability can differ from perfect uniform by ~ range / 2^63, where range = x_max - x_min + 1. This is the standard modulo-mapping bound when taking MOD(seed, range) with a positive range and a 64-bit seed.

Examples (relative worst-case bias):

  • For range = 10^6, bias ~ 10^6 / 2^63 = 1.1e−13
  • For range = 10^9, bias ~ 10^9 / 2^63 = 1.1e−10
    Parameters
    [in]x_maxrange [x_min, x_max]
    [in,out]seedinteger seed
    Returns
    integer in the interval [x_min, x_max]

Definition at line 261 of file quickrnd.F90.

◆ fisher_yates_shuffle()

subroutine, public quickrnd_oct_m::fisher_yates_shuffle ( integer(int32), intent(in)  m,
integer(int64), intent(in)  n,
integer(int64), intent(inout)  seed,
integer(int64), dimension(:), intent(out)  values 
)

Return m random numbers from a range of \([1, n]\) with no replacement.

The simple implementation is O(n) in memory. More details can be found on the [wikipedia page](https:

Parameters
[in]mSubset of random numbers to sample
[in]nMax random integer
[in,out]seedInitial seed

Definition at line 282 of file quickrnd.F90.

Variable Documentation

◆ splitmix64_123

integer(int64), parameter, public quickrnd_oct_m::splitmix64_123 = int(Z'B4DC9BD462DE412B', int64)

Definition at line 134 of file quickrnd.F90.

◆ splitmix64_321

integer(int64), parameter, public quickrnd_oct_m::splitmix64_321 = int(Z'E95F1C4EFCF85DEE', int64)

Definition at line 134 of file quickrnd.F90.