[Haskell-cafe] ANNOUNCE: normaldistribution-1.1 – Minimum fuss normally distributed random values.

Bjorn Buckwalter bjorn.buckwalter at gmail.com
Sat Apr 9 15:23:58 CEST 2011


Dear all,

Thanks to enlightening advice from Tom Nielsen and Zoltan Novak
normaldistribution now generates normally distributed values using the
Box-Muller method instead of the Central Limit Theorem. This change
provides a 5-10x speedup.

The only API impact is that the random values must now be instances of
Floating rather than just Fractional. (The pre-canned Random instances
that satisfy Fractional, i.e. Double and Float, also satisfy
Floating.)

Cheers,
Bjorn


---------- Forwarded message ----------
From: Bjorn Buckwalter <bjorn.buckwalter at gmail.com>
Date: Sat, Apr 9, 2011 at 15:21
Subject: ANNOUNCE: normaldistribution-1.0 – Minimum fuss normally
distributed random values.


Dear all,

I'm pleased to announce the immediate availability of the
normaldistribution library on hackage:

 http://hackage.haskell.org/package/normaldistribution

This purpose of this library is to have a simple API and no
dependencies beyond Haskell 98 in order to let you produce normally
distributed random values with a minimum of fuss. This library does
not attempt to be blazingly fast nor to pass stringent tests of
randomness. It attempts to be very easy to install and use while being
"good enough" for many applications (simulations, games, etc.).  The
API builds upon and is largely analogous to that of the Haskell 98
Random module (more recently System.Random).

Pure:

> (sample,g) = normal  myRandomGen  -- using a Random.RandomGen
> samples    = normals myRandomGen  -- infinite list
> samples2   = mkNormals 10831452   -- infinite list using a seed

In the IO monad:

> sample    <- normalIO
> samples   <- normalsIO  -- infinite list

With custom mean and standard deviation:

> (sample,g) = normal'    (mean,sigma) myRandomGen
> samples    = normals'   (mean,sigma) myRandomGen
> samples2   = mkNormals' (mean,sigma) 10831452

> sample    <- normalIO'  (mean,sigma)
> samples   <- normalsIO' (mean,sigma)

Internally the library uses the Central Limit Theorem to approximate
normally distributed values from multiple uniformly distributed random
values.

Enjoy,
Bjorn



More information about the Haskell-Cafe mailing list