Skip to content

sashaegorov/random

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

38 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Elixir Random module

This module contains pseudo-random number generators for various distributions ported from Python 3 random module for Elixir. The documentation below is adapted from that module as well.

For integers, there is uniform selection from a range. For sequences, there is uniform selection of a random element, a function to generate a random permutation of a list in-place, and a function for random sampling without replacement.

On the real line, there are functions to compute uniform, normal (Gaussian), lognormal, negative exponential, gamma, and beta distributions. For generating distributions of angles, the von Mises distribution is available.

Documentation

Build

The only dependency is TinyMT Erlang, which is available on hex.pm

$ mix get.deps
$ mix

Test

$ mix test

Usage

Random is available on hex.pm. You neeed to include {:random, "~> 0.2.3"} as a dependency in your project.

Examples

iex(1)> Random.randint(10, 20)
14
iex(2)> Random.sample(0..10000, 4)
[4436, 5015, 7231, 9459]
iex(3)> {n, gauss_next} = Random.gauss(1, 2)
{-2.0056082102271917, 0.5561885306380824}
iex(4)> {n, gauss_next} = Random.gauss(1, 2, gauss_next)
{2.112377061276165, nil}

Thanks

  • Kenji Rikitake pointed out a range error in the module and provided code which enables using his TinyMT Erlang library to produce floats in [0.0, 1.0) range.

  • p2k updated the project to be compatible with Elixir 1.2.

About

Elixir port of Python 3 random module.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Elixir 100.0%