Can you contribute your code to PolyMath:
https://github.com/PolyMathOrg/PolyMath
We have other RNGs available.

Thank you.

On Fri, Nov 9, 2018 at 3:23 PM Sven Van Caekenberghe <[email protected]> wrote:

> Hi,
>
> By accident I came across a pseudo random number generator that I never
> heard off before. It is supposed to be pretty good and had a very simple
> implementation. So I ported it to Pharo.
>
> <class comment>
>
> I am RandomWELL512, a random number generator.
>
> I use the PRNG (Pseudo Randon Number Generator) WELL (Well equidistributed
> long-period linear) with a 512 bit state.
>
>   https://en.wikipedia.org/wiki/Well_equidistributed_long-period_linear
>   http://www.iro.umontreal.ca/~lecuyer/myftp/papers/wellrng.pdf
>
> Implementation algorithm (See #nextUInt32)
>
>   http://www.lomont.org/Math/Papers/2008/Lomont_PRNG_2008.pdf (Chris
> Lomont, www.lomont.org)
>
> Usage
>
>   RandomWELL512 new in: [ :r | (1 to: 10) collect: [ :i | r nextUInt32 ]
> ].
>
>   RandomWELL512 new useUnixRandomGeneratorSeed; in: [ :r | (1 to: 10)
> collect: [ :i | r next ] ].
>
>   RandomWELL512 new in: [ :r | (1 to: 10) collect: [ :i | r nextInt: 1000
> ] ].
>
>   RandomWELL512 new in: [ :random | | count all |
>     random useUnixRandomGeneratorSeed.
>     count := 1024 * 1024.
>     all := Array new: count streamContents: [ :out |
>       count timesRepeat: [ out nextPut: random next ] ].
>     { all min. all max. all average. all stdev } ].
>
>   [ RandomWELL512 new in: [ :random | 1 to: 1e6 do: [ :i | random next ] ]
> ] timeToRun.
>
> Note that you should create one instance, seed it properly, and keep using
> it.
>
> </class comment>
>
> It is acceptably fast, generating 1M [0,1) Floats in about 0.1s. I
> compared the output with a fixed initial state to the C code that I started
> from and I got the same numbers. Maybe some people find this interesting.
>
> I attached a file out.
>
> Sven
>
>
>
>

-- 
Serge Stinckwic
h

Int. Research Unit
 on Modelling/Simulation of Complex Systems (UMMISCO)
Sorbonne University
 (SU)
French National Research Institute for Sustainable Development (IRD)
U
niversity of Yaoundé I, Cameroun
"Programs must be written for people to read, and only incidentally for
machines to execute."
https://twitter.com/SergeStinckwich

Reply via email to