simple random

Simple random number generator gem for Ruby (based on C# code by John D. Cook).

37
10
Ruby

simple-random Build status

Generate random numbers sampled from the following distributions:

  • Beta
  • Cauchy
  • Chi square
  • Dirichlet
  • Exponential
  • Gamma
  • Inverse gamma
  • Laplace (double exponential)
  • Normal
  • Student t
  • Triangular
  • Uniform
  • Weibull

Based on John D. Cook’s SimpleRNG C# library.

Installation

Plain Ruby

Run gem install simple-random in your terminal.

Ruby on Rails

Add gem 'simple-random', '~> 1.0.0' to your Gemfile and run bundle install.

Usage

Some of the methods available:

    > r = SimpleRandom.new                 # Initialize a SimpleRandom instance
     => #<SimpleRandom:0x007f9e3ad58010 @m_w=521288629, @m_z=362436069>
    > r.set_seed                           # By default the same random seed is used, so we change it
    > r.uniform(0, 5)                      # Produce a uniform random sample from the open interval (lower, upper).
     => 0.6353204359766096
    > r.normal(1000, 200)                  # Sample normal distribution with given mean and standard deviation
     => 862.5447157384566
    > r.exponential(2)                     # Get exponential random sample with specified mean
     => 0.9386480625062965
    > r.triangular(0, 2.5, 10)             # Get triangular random sample with specified lower limit, mode, upper limit
     => 3.1083306054169277

Note that by default the same seed is used every time to generate the random numbers. This means that repeated runs should yield the same results. If you would like it to always initialize with a different seed, or if you are using multiple SimpleRandom objects, you should call #set_seed on the instance.

See lib/simple-random.rb for all available methods and options.

Note on Patches/Pull Requests

  • Fork the project.
  • Make your feature addition or bug fix.
  • Add tests for it. This is important so I don’t break it in a future version unintentionally.
  • Commit, but please do not mess with the gemspec, Rakefile, VERSION, LICENSE, or .travis.yml.
    (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
  • Send me a pull request.

HT: This list was modified from the default instructions that ship with jeweler.

Copyright

Distributed under the Code Project Open License, which is similar to MIT or BSD. See LICENSE for full details (don’t just take my word for it that it’s similar to those licenses).

History

1.0.3 - 2015-11-25

  • Attempt to reduce code complexity and improve readability
  • Change error handling somewhat to throw specific errors and improve messages

1.0.2 - 2015-11-24

  • Merge pull request from cunchem to fix Laplace method

1.0.1 - 2015-07-31

  • Merge purcell’s changes to fix numeric seeds

1.0.0 - 2014-07-08

  • Migrate to new version of Jeweler for gem packaging
  • Merge jwroblewski’s changes into a new multi-threaded simple random class
  • Change from Code Project Open License to CDDL-1.0

0.10.0 - 2014-03-31

0.9.3 - 2011-09-16

  • Sample from Dirichlet distribution with given set of parameters

0.9.2 - 2011-09-06

  • Use microseconds for random seed

0.9.1 - 2010-07-27

  • First stable release