class EnvelopeAlloc::RandomGaussian
Public Class Methods
gaussian(mean, stddev, rand)
click to toggle source
# File lib/envelope_alloc/gaussian.rb, line 4 def self.gaussian(mean, stddev, rand) rho = Math.sqrt(-2 * Math.log(1 - rand.call)) scale = stddev * rho theta = 2 * Math::PI * rand.call x = mean + scale * Math.cos(theta) y = mean + scale * Math.sin(theta) [x, y] end
new(mean, stddev, rand_helper = lambda {Kernel.rand})
click to toggle source
# File lib/envelope_alloc/gaussian.rb, line 13 def initialize(mean, stddev, rand_helper = lambda {Kernel.rand}) @rand_helper = rand_helper @mean = mean @stddev = stddev @valid = false @next = 0 end
Public Instance Methods
rand()
click to toggle source
# File lib/envelope_alloc/gaussian.rb, line 21 def rand if @valid @valid = false @next else @valid = true x, y = self.class.gaussian(@mean, @stddev, @rand_helper) @next = y x end end