class Simpack::LCG

Attributes

increment[R]
modulus[R]
multiplier[R]
seed[R]

Public Class Methods

new(options = {}) click to toggle source
# File lib/simpack.rb, line 9
def initialize(options = {})
  default_options = {multiplier: 6364136223846793005,
                     modulus: 2 ** 64,
                     increment: 1442695040888963407,
                     seed: Time.now.to_i}

  options = default_options.merge(options)
  check_options(options)

  @multiplier = options[:multiplier]
  @modulus = options[:modulus]
  @increment = options[:increment]
  @seed = @x = options[:seed]
end

Public Instance Methods

uniform(n = 1) click to toggle source
# File lib/simpack.rb, line 24
def uniform(n = 1)
  return generate_number if n == 1

  results = Array.new(n)
  (0...n).each do |i|
    results[i] = generate_number
  end
  results
end

Private Instance Methods

check_options(options) click to toggle source
# File lib/simpack.rb, line 36
def check_options(options)
  raise "Invalid Modulus" if options[:modulus] == 0
  raise "Invalid Multiplier" if options[:multiplier] == 0
end
generate_number() click to toggle source
# File lib/simpack.rb, line 41
def generate_number
  @x = (@multiplier * @x + @increment) % @modulus
  @x / @modulus.to_f
end