struct Alea::Random(G)

Overview

Alea::Random provides the interface for pseudo-random generations and distribution sampling.

NOTE due to this, you still need to specify the generator as the generic type, as it does not accept a default one.

seed = 9377
random = Alea::Random(Alea::XSR128).new(seed)
random.float # => 0.08153691876972058

# Passing an instance of a PRNG:
xsr = Alea::XSR256.new 9377, 2353
random = Alea::Random.new xsr
random.prng # => Alea::XSR256

As long as it includes the Alea::PRNG module, you can build your own generator: check out the example provided in the documentation to make it a valid extension for Alea::Random.

The following implementations are taken from numpy.

Defined in:

Constructors

Instance Method Summary

Constructor Detail

def self.new(seed32 : Int, seed64 : Int) #

Initializes the PRNG with initial seeds.

@parameters:

  • seed32: value as input to init. the state of 32-bit generators of #prng.
  • seed64: value as input to init. the state of 64-bit generators of #prng.

@exceptions:


def self.new(seed : Int) #

Initializes the PRNG with initial seed.

@parameters:

  • seed: initial seed as input for generating the state of #prng.

@exceptions:


def self.new(prng : G) #

Initializes the PRNG with initial instance.

NOTE due to this, you still need to specify the generator as the generic type, as it does not accept a default one.

@parameters:

  • #prng: the PRNG instance itself.

def self.new #

Initializes the PRNG with initial state readed from system resources.


Instance Method Detail

def beta(*, a, b) #

Generate a beta-distributed, pseudo-random Float64 in range [0, 1).

@note: named arguments are mandatory to prevent ambiguity.

@parameters:

  • a: shape parameter of the distribution; usually mentioned as α.
  • b: shape parameter of the distribution; usually mentioned as β.

@exceptions:


def beta32(*, a, b) #

Generate a beta-distributed, pseudo-random Float32 in range [0, 1).

@note: named arguments are mandatory to prevent ambiguity.

@parameters:

  • a: shape parameter of the distribution; usually mentioned as α.
  • b: shape parameter of the distribution; usually mentioned as β.

@exceptions:


def chisq(df) #

Generate a chi-square-distributed, pseudo-random Float64.

@parameters:

  • df: degrees of freedom of the distribution; usually mentioned as k.

@exceptions:


def chisq32(df) #

Generate a chi-square-distributed, pseudo-random Float32.

@parameters:

  • df: degrees of freedom of the distribution; usually mentioned as k.

@exceptions:


def exp(scale = 1.0) : Float64 #

Generate a exp-distributed, pseudo-random Float64.

@parameters:

  • scale: scale parameter of the distribution; usually mentioned as λ^-1.

@exceptions:


def exp32(scale = 1.0_f32) : Float32 #

Generate a exp-distributed, pseudo-random Float32.

@parameters:

  • scale: scale parameter of the distribution; usually mentioned as λ^-1.

@exceptions:


def f(df1, df2) #

Generate a f-snedecor-distributed, pseudo-random Float64.

@parameters:

  • df1: degrees of freedom of the underlying chi-square distribution, numerator side; usually mentioned as m.
  • df2: degrees of freedom of the underlying chi-square distribution, denominator side; usually mentioned as n.

@note: due to homonymy with float methods, the unparsed method is indentified with #next_fs.

@exceptions:


def f32(df1, df2) #

Generate a f-snedecor-distributed, pseudo-random Float32.

@parameters:

  • df1: degrees of freedom of the underlying chi-square distribution, numerator side; usually mentioned as m.
  • df2: degrees of freedom of the underlying chi-square distribution, denominator side; usually mentioned as n.

@note: due to homonymy with float methods, the unparsed method is indentified with #next_fs32.

@exceptions:


def float(range : Range(Number, Number)) : Float64 #

Generate a uniform-distributed, pseudo-random Float64 in fixed range.

@parameters:

  • range: range parameter, inclusive or exclusive, of the distribution:
  • range.begin: left bound parameter of range of the distribution; usually mentioned as a.
  • range.end: right bound parameter of range of the distribution; usually mentioned as b.

@notes:

  • inclusive means [range.begin, range.end].
  • exclusive means [range.begin, range.end).
  • see Range from Crystal stdlib.

@examples:

range_in = 10.0..9377.0
range_in # Range(Float64, Float64), end-inclusive

range_ex = 10.0...9377.0
range_ex # Range(Float64, Float64), end-exclusive

random = Alea::Random.new
random.float(range_in) # => 9113.861259040154
random.float(range_ex) # => 7701.2778313581175

@exceptions:


def float(max : Number) : Float64 #

Generate a uniform-distributed, pseudo-random Float64 in range [0.0, max).

@parameters:

  • max: right bound parameter of range of the distribution; usually mentioned as b.

@exceptions:


def float : Float64 #

Generate a uniform-distributed, pseudo-random Float64 in range [0.0, 1.0).

@references: #next_f64.


def float(min : Number, max : Number) : Float64 #

Generate a uniform-distributed, pseudo-random Float64 in fixed range.

@parameters:

  • min: left bound parameter of range of the distribution; usually mentioned as a.
  • max: right bound parameter of range of the distribution; usually mentioned as b.

def float32(range : Range(Number, Number)) : Float32 #

Generate a uniform-distributed, pseudo-random Float64 in fixed range.

@parameters:

  • range: range parameter, inclusive or exclusive, of the distribution:
  • range.begin: left bound parameter of range of the distribution; usually mentioned as a.
  • range.end: right bound parameter of range of the distribution; usually mentioned as b.

@notes:

  • inclusive means [range.begin, range.end].
  • exclusive means [range.begin, range.end).
  • see Range from Crystal stdlib.

@examples:

range_in = 10.0..9377.0
range_in # Range(Float64, Float64), end-inclusive

range_ex = 10.0...9377.0
range_ex # Range(Float64, Float64), end-exclusive

random = Alea::Random.new
random.float32(range_in) # => 950.3449
random.float32(range_ex) # => 3455.0183

@exceptions:


def float32 : Float32 #

Generate a uniform-distributed, pseudo-random Float32 in range [0.0, 1.0).

@references: #next_f32.


def float32(min : Number, max : Number) : Float32 #

Generate a uniform-distributed, pseudo-random Float32 in fixed range.

@parameters:

  • min: left bound parameter of range of the distribution; usually mentioned as a.
  • max: right bound parameter of range of the distribution; usually mentioned as b.

def float32(max : Number) : Float32 #

Generate a uniform-distributed, pseudo-random Float32 in range [0.0, max).

@parameters:

  • max: right bound parameter of range of the distribution; usually mentioned as b.

@exceptions:


def gamma(shape, scale = 1.0) #

Generate a gamma-distributed, pseudo-random Float64.

@parameters:

  • shape: shape parameter of the distribution; usually mentioned as k.
  • scale: scale parameter of the distribution; usually mentioned as θ.

@exceptions:


def gamma32(shape, scale = 1.0) #

Generate a gamma-distributed, pseudo-random Float32.

@parameters:

  • shape: shape parameter of the distribution; usually mentioned as k.
  • scale: scale parameter of the distribution; usually mentioned as θ.

@exceptions:


def laplace(loc = 0.0, scale = 1.0) #

Generate a laplace-distributed, pseudo-random Float64.

@parameters:

  • loc: centrality parameter, or mean of the distribution; usually mentioned as μ.
  • scale: scale parameter of the distribution; usually mentioned as b.

@exceptions:


def laplace32(loc = 0.0_f32, scale = 1.0_f32) #

Generate a laplace-distributed, pseudo-random Float32.

@parameters:

  • loc: centrality parameter, or mean of the distribution; usually mentioned as μ.
  • scale: scale parameter of the distribution; usually mentioned as b.

@exceptions:


def lognormal(loc = 0.0, sigma = 1.0) #

Generate a log-normal-distributed, pseudo-random Float64.

@parameters:

  • loc: centrality parameter, or mean of the underlying normal distribution; usually mentioned as μ.
  • sigma: scale parameter, or standard deviation of the underlying normal distribution; usually mentioned as σ.

@exceptions:


def lognormal32(loc = 0.0_f32, sigma = 1.0_f32) #

Generate a log-normal-distributed, pseudo-random Float32.

@parameters:

  • loc: centrality parameter, or mean of the underlying normal distribution; usually mentioned as μ.
  • sigma: scale parameter, or standard deviation of the underlying normal distribution; usually mentioned as σ.

@exceptions:


def next_beta(*, a : Float64, b : Float64) : Float64 #

Generate a beta-distributed, pseudo-random Float64 in range [0, 1). Unparsed version of #beta.

@note: named arguments are mandatory to prevent ambiguity.

@parameters:

  • a: shape parameter of the distribution; usually mentioned as α.
  • b: shape parameter of the distribution; usually mentioned as β.

def next_beta32(*, a : Float32, b : Float32) : Float32 #

Generate a beta-distributed, pseudo-random Float32 in range [0, 1). Unparsed version of #beta32.

@note: named arguments are mandatory to prevent ambiguity.

@parameters:

  • a: shape parameter of the distribution; usually mentioned as α.
  • b: shape parameter of the distribution; usually mentioned as β.

def next_chisq(df : Float64) : Float64 #

Generate a chi-square-distributed, pseudo-random Float64. Unparsed version of #chisq.

@parameters:

  • df: degrees of freedom of the distribution; usually mentioned as k.

def next_chisq32(df : Float32) : Float32 #

Generate a chi-square-distributed, pseudo-random Float32. Unparsed version of #chisq32.

@parameters:

  • df: degrees of freedom of the distribution; usually mentioned as k.

def next_exp : Float64 #

Generate a exp-distributed, pseudo-random Float64. Unparsed version of #exp.

@note:

  • scale is 1.0.

def next_exp(scale : Float64) : Float64 #

Generate a exp-distributed, pseudo-random Float64. Unparsed version of #exp.

@parameters:

  • scale: scale parameter of the distribution; usually mentioned as λ^-1.

def next_exp32 : Float32 #

Generate a exp-distributed, pseudo-random Float32. Unparsed version of #exp32.

@note:

  • scale is 1.0.

def next_exp32(scale : Float32) : Float32 #

Generate a exp-distributed, pseudo-random Float32. Unparsed version of #exp32.

@parameters:

  • scale: scale parameter of the distribution; usually mentioned as λ^-1.

def next_f32 : Float32 #

Returns the next generated Float32.


def next_f64 : Float64 #

Returns the next generated Float64.


def next_float(max : Float64) : Float64 #

Generate a uniform-distributed, pseudo-random Float64 in range [0, max). Unparsed version for #float.

@parameters:

  • max: right bound parameter of range of the distribution; usually mentioned as b.

def next_float(min : Float64, max : Float64) : Float64 #

Generate a uniform-distributed, pseudo-random Float64 in fixed range. Unparsed version for #float.

@parameters:

  • min: left bound parameter of range of the distribution; usually mentioned as a.
  • max: right bound parameter of range of the distribution; usually mentioned as b.

def next_float32(max : Float32) : Float32 #

Generate a uniform-distributed, pseudo-random Float32 in range [0, max). Unparsed version for #float32.

@parameters:

  • max: right bound parameter of range of the distribution; usually mentioned as b.

def next_float32(min : Float32, max : Float32) : Float32 #

Generate a uniform-distributed, pseudo-random Float32 in fixed range. Unparsed version for #float32.

@parameters:

  • min: left bound parameter of range of the distribution; usually mentioned as a.
  • max: right bound parameter of range of the distribution; usually mentioned as b.

def next_fs(df1 : Float64, df2 : Float64) : Float64 #

Generate a f-snedecor-distributed, pseudo-random Float64. Unparsed version of #f.

@parameters:

  • df1: degrees of freedom of the underlying chi-square distribution, numerator side; usually mentioned as m.
  • df2: degrees of freedom of the underlying chi-square distribution, denominator side; usually mentioned as n.

def next_fs32(df1 : Float32, df2 : Float32) : Float32 #

Generate a f-snedecor-distributed, pseudo-random Float32. Unparsed version of #f32.

@parameters:

  • df1: degrees of freedom of the underlying chi-square distribution, numerator side; usually mentioned as m.
  • df2: degrees of freedom of the underlying chi-square distribution, denominator side; usually mentioned as n.

def next_gamma(shape : Float64, scale : Float64) : Float64 #

Generate a gamma-distributed, pseudo-random Float64. Unparsed version of #gamma.

@parameters:

  • shape: shape parameter of the distribution; usually mentioned as k.
  • scale: scale parameter of the distribution; usually mentioned as θ.

def next_gamma(shape : Float64) : Float64 #

Generate a gamma-distributed, pseudo-random Float64. Unparsed version of #gamma.

@parameters:

  • shape: shape parameter of the distribution; usually mentioned as k.

@note:

  • scale is 1.0.

def next_gamma32(shape : Float32, scale : Float32) : Float32 #

Generate a gamma-distributed, pseudo-random Float32. Unparsed version of #gamma.

@parameters:

  • shape: shape parameter of the distribution; usually mentioned as k.
  • scale: scale parameter of the distribution; usually mentioned as θ.

def next_gamma32(shape : Float32) : Float32 #

Generate a gamma-distributed, pseudo-random Float32. Unparsed version of #gamma32.

@parameters:

  • shape: shape parameter of the distribution; usually mentioned as k.

@note:

  • scale is 1.0.

def next_laplace : Float64 #

Generate a laplace-distributed, pseudo-random Float64. Unparsed version of #laplace.

@notes:

  • loc is 0.0.
  • scale is 1.0.

def next_laplace(loc : Float64, scale : Float64) : Float64 #

Generate a laplace-distributed, pseudo-random Float64. Unparsed version of #laplace.

@parameters:

  • loc: centrality parameter, or mean of the distribution; usually mentioned as μ.
  • scale: scale parameter of the distribution; usually mentioned as b.

def next_laplace(loc : Float64) : Float64 #

Generate a laplace-distributed, pseudo-random Float64. Unparsed version of #laplace.

@parameters:

  • loc: centrality parameter, or mean of the distribution; usually mentioned as μ.

@notes:

  • scale is 1.0.

def next_laplace32 : Float32 #

Generate a laplace-distributed, pseudo-random Float32. Unparsed version of #laplace32.

@notes:

  • loc is 0.0.
  • scale is 1.0.

def next_laplace32(loc : Float32) : Float32 #

Generate a laplace-distributed, pseudo-random Float32. Unparsed version of #laplace32.

@parameters:

  • loc: centrality parameter, or mean of the distribution; usually mentioned as μ.

@notes:

  • scale is 1.0.

def next_laplace32(loc : Float32, scale : Float32) : Float32 #

Generate a laplace-distributed, pseudo-random Float32. Unparsed version of #laplace32.

@parameters:

  • loc: centrality parameter, or mean of the distribution; usually mentioned as μ.
  • scale: scale parameter of the distribution; usually mentioned as b.

def next_lognormal : Float64 #

Generate a log-normal-distributed, pseudo-random Float64. Unparsed version of #lognormal.

@notes:

  • loc is 0.0.
  • sigma is 1.0.

def next_lognormal(loc : Float64) : Float64 #

Generate a log-normal-distributed, pseudo-random Float64. Unparsed version of #lognormal.

@parameters:

  • loc: centrality parameter, or mean of the underlying normal distribution; usually mentioned as μ.

@notes:

  • sigma is 1.0.

def next_lognormal(loc : Float64, sigma : Float64) : Float64 #

Generate a log-normal-distributed, pseudo-random Float64. Unparsed version of #lognormal.

@parameters:

  • loc: centrality parameter, or mean of the underlying normal distribution; usually mentioned as μ.
  • sigma: scale parameter, or standard deviation of the underlying normal distribution; usually mentioned as σ.

def next_lognormal32 : Float32 #

Generate a log-normal-distributed, pseudo-random Float32. Unparsed version of #lognormal32.

@notes:

  • loc is 0.0.
  • sigma is 1.0.

def next_lognormal32(loc : Float32) : Float32 #

Generate a log-normal-distributed, pseudo-random Float32. Unparsed version of #lognormal32.

@parameters:

  • loc: centrality parameter, or mean of the underlying normal distribution; usually mentioned as μ.

@notes:

  • sigma is 1.0.

def next_lognormal32(loc : Float32, sigma : Float32) : Float32 #

Generate a log-normal-distributed, pseudo-random Float32. Unparsed version of #lognormal32.

@parameters:

  • loc: centrality parameter, or mean of the underlying normal distribution; usually mentioned as μ.
  • sigma: scale parameter, or standard deviation of the underlying normal distribution; usually mentioned as σ.

def next_normal : Float64 #

Generate a normal-distributed, pseudo-random Float64. Unparsed version of #normal.

@notes:

  • loc is 0.0.
  • sigma is 1.0.

def next_normal(loc : Float64) : Float64 #

Generate a normal-distributed, pseudo-random Float64. Unparsed version of #normal.

@parameters:

  • loc: centrality parameter, or mean of the distribution; usually mentioned as μ.

@notes:

  • sigma is 1.0.

def next_normal(loc : Float64, sigma : Float64) : Float64 #

Generate a normal-distributed, pseudo-random Float64. Unparsed version of #normal.

@parameters:

  • loc: centrality parameter, or mean of the distribution; usually mentioned as μ.
  • sigma: scale parameter, or standard deviation of the distribution; usually mentioned as σ.

def next_normal32 : Float32 #

Generate a normal-distributed, pseudo-random Float32. Unparsed version of #normal32.

@notes:

  • loc is 0.0.
  • sigma is 1.0.

def next_normal32(loc : Float32, sigma : Float32) : Float32 #

Generate a normal-distributed, pseudo-random Float32. Unparsed version of #normal32.

@parameters:

  • loc: centrality parameter, or mean of the distribution; usually mentioned as μ.
  • sigma: scale parameter, or standard deviation of the distribution; usually mentioned as σ.

def next_normal32(loc : Float32) : Float32 #

Generate a normal-distributed, pseudo-random Float32. Unparsed version of #normal32.

@parameters:

  • loc: centrality parameter, or mean of the distribution; usually mentioned as μ.

@notes:

  • sigma is 1.0.

def next_poisson : Int64 #

Generate a poisson-distributed, pseudo-random Int64. Unparsed version of #poisson.

@notes:

  • lam is 1.0.

def next_poisson(lam : Float64) : Int64 #

Generate a poisson-distributed, pseudo-random Int64. Unparsed version of #poisson.

@parameters:

  • lam: separation parameter of the distribution; usually mentioned as λ.

def next_t(df : Float64) : Float64 #

Generate a t-student-distributed, pseudo-random Float64. Unparsed version of #t.

@parameters:

  • df: degrees of freedom of the distribution; usually mentioned as n.

def next_t32(df : Float32) : Float32 #

Generate a t-student-distributed, pseudo-random Float32. Unparsed version of #t32.

@parameters:

  • df: degrees of freedom of the distribution; usually mentioned as n.

def next_u32 : UInt32 #

Returns the next generated UInt32.


def next_u64 : UInt64 #

Returns the next generated UInt64.


def next_uint(min : UInt64, max : UInt64) : UInt64 #

Generate a uniform-distributed, pseudo-random UInt64 in fixed range. Unparsed version for #uint.

@parameters:

  • min: left bound parameter of range of the distribution; usually mentioned as a.
  • max: right bound parameter of range of the distribution; usually mentioned as b.

def next_uint(max : UInt64) : UInt64 #

Generate a uniform-distributed, pseudo-random UInt64 in range [0, max). Unparsed version for #uint.

@parameters:

  • max: right bound parameter of range of the distribution; usually mentioned as b.

def next_uint32(min : UInt32, max : UInt32) : UInt32 #

Generate a uniform-distributed, pseudo-random UInt32 in fixed range. Unparsed version for #uint32.

@parameters:

  • min: left bound parameter of range of the distribution; usually mentioned as a.
  • max: right bound parameter of range of the distribution; usually mentioned as b.

def next_uint32(max : UInt32) : UInt32 #

Generate a uniform-distributed, pseudo-random UInt32 in range [0, max). Unparsed version for #uint32.

@parameters:

  • max: right bound parameter of range of the distribution; usually mentioned as b.

def normal(loc = 0.0, sigma = 1.0) #

Generate a normal-distributed, pseudo-random Float64.

@parameters:

  • loc: centrality parameter, or mean of the distribution; usually mentioned as μ.
  • sigma: scale parameter, or standard deviation of the distribution; usually mentioned as σ.

@exceptions:


def normal32(loc = 0.0, sigma = 1.0) : Float32 #

Generate a normal-distributed, pseudo-random Float32.

@parameters:

  • loc: centrality parameter, or mean of the distribution; usually mentioned as μ.
  • sigma: scale parameter, or standard deviation of the distribution; usually mentioned as σ.

@exceptions:


def poisson(lam = 1.0) #

Generate a poisson-distributed, pseudo-random Int64.

@parameters:

  • lam: separation parameter of the distribution; usually mentioned as λ.

@exceptions:


def prng : G #

The PRNG in use by this struct.


def t(df) #

Generate a t-student-distributed, pseudo-random Float64.

@parameters:

  • df: degrees of freedom of the distribution; usually mentioned as n.

@exceptions:


def t32(df) #

Generate a t-student-distributed, pseudo-random Float32.

@parameters:

  • df: degrees of freedom of the distribution; usually mentioned as n.

@exceptions:


def uint : UInt64 #

Generate a uniform-distributed, pseudo-random UInt64.

@references: #next_u64.


def uint(range : Range(Number, Number)) : UInt64 #

Generate a uniform-distributed, pseudo-random UInt64 in fixed range.

@parameters:

  • range: range parameter, inclusive or exclusive, of the distribution:
  • range.begin: left bound parameter of range of the distribution; usually mentioned as a.
  • range.end: right bound parameter of range of the distribution; usually mentioned as b.

@notes:

  • inclusive means [range.begin, range.end].
  • exclusive means [range.begin, range.end).
  • see Range from Crystal stdlib.

@examples:

range_in = 10..9377
range_in # Range(Int32, Int32), end-inclusive

range_ex = 10...9377
range_ex # Range(Int32, Int32), end-exclusive

random = Alea::Random.new
random.uint(range_in) # => 2640
random.uint(range_ex) # => 527

@exceptions:


def uint(max : Number) : UInt64 #

Generate a uniform-distributed, pseudo-random UInt64 in range [0, max).

@parameters:

  • max: right bound parameter of range of the distribution; usually mentioned as b.

@exceptions:


def uint(min : Number, max : Number) : UInt64 #

Generate a uniform-distributed, pseudo-random UInt64 in fixed range.

@parameters:

  • min: left bound parameter of range of the distribution; usually mentioned as a.
  • max: right bound parameter of range of the distribution; usually mentioned as b.

def uint32 : UInt32 #

Generate a uniform-distributed, pseudo-random UInt32.

@references: #next_u32.


def uint32(range : Range(Number, Number)) : UInt32 #

Generate a uniform-distributed, pseudo-random UInt32 in fixed range.

@parameters:

  • range: range parameter, inclusive or exclusive, of the distribution:
  • range.begin: left bound parameter of range of the distribution; usually mentioned as a.
  • range.end: right bound parameter of range of the distribution; usually mentioned as b.

@notes:

  • inclusive means [range.begin, range.end].
  • exclusive means [range.begin, range.end).
  • see Range from Crystal stdlib.

@examples:

range_in = 10..9377
range_in # Range(Int32, Int32), end-inclusive

range_ex = 10...9377
range_ex # Range(Int32, Int32), end-exclusive

random = Alea::Random.new
random.uint32(range_in) # => 9260
random.uint32(range_ex) # => 153

@exceptions:


def uint32(max : Number) : UInt32 #

Generate a uniform-distributed, pseudo-random UInt32 in range [0, max).

@parameters:

  • max: right bound parameter of range of the distribution; usually mentioned as b.

@exceptions:


def uint32(min : Number, max : Number) : UInt32 #

Generate a uniform-distributed, pseudo-random UInt32 in fixed range.

@parameters:

  • min: left bound parameter of range of the distribution; usually mentioned as a.
  • max: right bound parameter of range of the distribution; usually mentioned as b.