version | 2.1.0 |
license | BSD3 |
native-modules | False |
elm-version | 0.18.0 <= v < 0.19.0 |
Tag | 2.1.0 |
Committed At | 2018-02-01 12:46:23 UTC |
This is a fork, you probably want mgold/elm-random-pcg
I created this version of the Random library to get more bits of randomness for a random password generator.
For this purpose, I created Random.Pcg.Extended
, which Implements the extended version of PCG.
In the process of doing this, I made the Random library more general, e.g.
with Random.General
it is now possible to use your own RNG as a base generator.
Original readme:
"The generation of random numbers is too important to be left to chance." – Robert R. Coveyou
An alternate random number generator built around four principles:
Statistical Quality. If you use any seed less than 53,668 and generate one bool, it will be True
– if you're
using core's Random
module. More sophisticated statistical tests spot patterns in the "random" numbers almost
immediately. Would you want to trust the accuracy of your fuzz
tests to such a flawed algorithm? This library
produces far less predictable and biased output, especially if you use thousands of random numbers. See
test/dieharder
for more details.
Useful features. This library exports constant
and andMap
, which are conspicuously absent from core, along
with other helpful functions for composing generators. Particularly interesting is independentSeed
, which allows for
lazy lists and isolated components to generate as much randomness as they need, when they need it.
Performance. This library will generate floats about 3.5 times faster than core, and ints do not regress. These figures stand to improve pending some optimizations to the compiler. You can see the full benchmark results.
Compatibility. This library is a drop-in replacement for core's Random module. Specifically, you
can replace import Random
with import Random.Pcg as Random
and everything will continue to work. (The one exception is third party
libraries like elm-random-extra.)
This is an implementation of PCG by M. E. O'Neil. The generator is not cryptographically secure.
Please report bugs, feature requests, and other issues on GitHub.
andMap
flipped.andThen
flipped.initialSeed2
, since there are now only 32 bits of state.Random.Pcg.Interop.fission
has been changed to a (core) generator of (PCG) seeds.generate
to match core 4.x API. Implemented by Richard Feldman.generate
renamed step
to match core 4.x API.Random.Pcg
from Random.PCG
.split
has been removed; use independentSeed
.minInt
and maxInt
values changed to match core.