www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - Normal distribution

reply Andrei Alexandrescu <SeeWebsiteForEmail erdani.org> writes:
Do we have a good quality converter of uniform numbers to 
Gaussian-distributed numbers around? -- Andrei
Feb 20 2016
next sibling parent reply Edwin van Leeuwen <edder tkwsping.nl> writes:
On Saturday, 20 February 2016 at 14:01:22 UTC, Andrei 
Alexandrescu wrote:
 Do we have a good quality converter of uniform numbers to 
 Gaussian-distributed numbers around? -- Andrei
There is one in dstats: https://github.com/DlangScience/dstats/blob/master/source/dstats/random.d#L266
Feb 20 2016
parent reply Andrei Alexandrescu <SeeWebsiteForEmail erdani.org> writes:
On 02/20/2016 09:06 AM, Edwin van Leeuwen wrote:
 On Saturday, 20 February 2016 at 14:01:22 UTC, Andrei Alexandrescu wrote:
 Do we have a good quality converter of uniform numbers to
 Gaussian-distributed numbers around? -- Andrei
There is one in dstats: https://github.com/DlangScience/dstats/blob/master/source/dstats/random.d#L266
Thanks! I ended up using this. Is someone working on adding Gaussians to phobos? -- Andrei
Feb 26 2016
parent reply John Colvin <john.loughran.colvin gmail.com> writes:
On Friday, 26 February 2016 at 18:23:41 UTC, Andrei Alexandrescu 
wrote:
 On 02/20/2016 09:06 AM, Edwin van Leeuwen wrote:
 On Saturday, 20 February 2016 at 14:01:22 UTC, Andrei 
 Alexandrescu wrote:
 Do we have a good quality converter of uniform numbers to
 Gaussian-distributed numbers around? -- Andrei
There is one in dstats: https://github.com/DlangScience/dstats/blob/master/source/dstats/random.d#L266
Thanks! I ended up using this. Is someone working on adding Gaussians to phobos? -- Andrei
https://github.com/WebDrake/hap is intended as a replacement for std.random and includes distributions (see e.g. https://github.com/WebDrake/hap/blob/master/source/hap/random/d stribution.d#L441). Also, remember http://dconf.org/2015/talks/wakeling.html
Feb 26 2016
parent reply Joseph Rushton Wakeling <joseph.wakeling webdrake.net> writes:
On Friday, 26 February 2016 at 19:11:15 UTC, John Colvin wrote:
 On Friday, 26 February 2016 at 18:23:41 UTC, Andrei 
 Alexandrescu wrote:
 On 02/20/2016 09:06 AM, Edwin van Leeuwen wrote:
 On Saturday, 20 February 2016 at 14:01:22 UTC, Andrei 
 Alexandrescu wrote:
 Do we have a good quality converter of uniform numbers to
 Gaussian-distributed numbers around? -- Andrei
There is one in dstats: https://github.com/DlangScience/dstats/blob/master/source/dstats/random.d#L266
Thanks! I ended up using this. Is someone working on adding Gaussians to phobos? -- Andrei
https://github.com/WebDrake/hap is intended as a replacement for std.random and includes distributions (see e.g. https://github.com/WebDrake/hap/blob/master/source/hap/random/d stribution.d#L441). Also, remember http://dconf.org/2015/talks/wakeling.html
Yup. The basic problem of getting this stuff into phobos are the architectural problems discussed in that talk. Unlike uniform distribution (which is straightforward to implement as a function, no questions asked), the normal distribution is best implemented as a range which keeps some state. So the reference-type/non-reference-type issues start becoming a factor. That said, it's _possible_ to implement a simple normal-variate-generator as a function, it's just inefficient.
Feb 26 2016
parent reply Andrei Alexandrescu <SeeWebsiteForEmail erdani.org> writes:
On 2/26/16 2:32 PM, Joseph Rushton Wakeling wrote:
 Yup.  The basic problem of getting this stuff into phobos are the
 architectural problems discussed in that talk.  Unlike uniform
 distribution (which is straightforward to implement as a function, no
 questions asked), the normal distribution is best implemented as a range
 which keeps some state.  So the reference-type/non-reference-type issues
 start becoming a factor.
Would it work to define Gaussian generators as regular generators (same as the existing ones), which keep the uniform engine as a member? -- Andrei
Feb 26 2016
next sibling parent Joseph Rushton Wakeling <joseph.wakeling webdrake.net> writes:
On Friday, 26 February 2016 at 20:15:10 UTC, Andrei Alexandrescu 
wrote:
 Would it work to define Gaussian generators as regular 
 generators (same as the existing ones), which keep the uniform 
 engine as a member?
Assuming that the uniform engine was uniquely and only used by that Gaussian generator, yes, that would be OK (although I think we can do better). If you try and take that approach using the same uniform generator as you're using in other parts of the code, it'll likely be problematic, unless the Gaussian stores a reference to that RNG rather than a by-value copy. Another approach, maybe more flexible given the current state of things, would be to define a functor whose opCall takes a uniform RNG as a parameter by ref, and which returns floating-point values distributed according to the Gaussian distribution. I still think, though, that we need to solve the fundamental architectural problems of how to implement random algorithms in range form, before we can really get a nice solution. I'm going to try and prepare some notes on that soon -- bug me if I don't come up with the goods.
Feb 26 2016
prev sibling parent =?UTF-8?B?TcOhcmNpbw==?= Martins <marcioapm gmail.com> writes:
On Friday, 26 February 2016 at 20:15:10 UTC, Andrei Alexandrescu 
wrote:
 On 2/26/16 2:32 PM, Joseph Rushton Wakeling wrote:
 Yup.  The basic problem of getting this stuff into phobos are 
 the
 architectural problems discussed in that talk.  Unlike uniform
 distribution (which is straightforward to implement as a 
 function, no
 questions asked), the normal distribution is best implemented 
 as a range
 which keeps some state.  So the 
 reference-type/non-reference-type issues
 start becoming a factor.
Would it work to define Gaussian generators as regular generators (same as the existing ones), which keep the uniform engine as a member? -- Andrei
This C implementation of the Marsaglia/Tsang Ziggurat method keeps no state except for that of the uniform rng and 3 small static lookup tables that can be initialized in the module's shared constructor: http://people.sc.fsu.edu/~jburkardt/cpp_src/ziggurat_inline/ziggurat_inline.cpp I wrote a D implementation of that with the uniform rngs factored out, leaving it at ~50 loc - not up to Phobos' standards for sure - but I suppose but it could be a starting point. If someone is interested in that let me know.
Feb 28 2016
prev sibling next sibling parent Leandro Motta Barros via Digitalmars-d <digitalmars-d puremagic.com> writes:
Maybe not good quality, but I like this one for my ludic purposes:


https://github.com/lmbarros/sbxs_dlang/blob/master/src/sbxs/rand/rng.d#L283

It is an implementation of an approximation algorithm that used to be
described here:

    http://home.online.no/~pjacklam/notes/invnorm/

But appears to be offline right now. On the Wayback Machine:


http://web.archive.org/web/20151030212409/http://home.online.no/~pjacklam/notes/invnorm
<http://web.archive.org/web/20151030212409/http://home.online.no/~pjacklam/notes/invnorm>

LMB


On Sat, Feb 20, 2016 at 12:01 PM, Andrei Alexandrescu via Digitalmars-d <
digitalmars-d puremagic.com> wrote:

 Do we have a good quality converter of uniform numbers to
 Gaussian-distributed numbers around? -- Andrei
Feb 20 2016
prev sibling next sibling parent Guillaume Piolat <name.lastname gmail.com> writes:
On Saturday, 20 February 2016 at 14:01:22 UTC, Andrei 
Alexandrescu wrote:
 Do we have a good quality converter of uniform numbers to 
 Gaussian-distributed numbers around? -- Andrei
Not sure if good quality but: https://d-gamedev-team.github.io/gfm/gfm.math.simplerng.html
Feb 20 2016
prev sibling next sibling parent John Colvin <john.loughran.colvin gmail.com> writes:
On Saturday, 20 February 2016 at 14:01:22 UTC, Andrei 
Alexandrescu wrote:
 Do we have a good quality converter of uniform numbers to 
 Gaussian-distributed numbers around? -- Andrei
There is this, from years ago: https://github.com/DlangScience/dstats/blob/master/source/dstats/random.d#L266 and the range wrappers also in that module. There is also of course https://github.com/WebDrake/hap/blob/master/source/hap/random/distribution.d#L507 But as you will remember from many messages from Joseph Rushton Wakeling, he's been blocked by difficulties with the range API, which also apply to the dstats version.
Feb 20 2016
prev sibling next sibling parent Timon Gehr <timon.gehr gmx.ch> writes:
On 20.02.2016 15:01, Andrei Alexandrescu wrote:
 Do we have a good quality converter of uniform numbers to
 Gaussian-distributed numbers around? -- Andrei
I don't know about quality, but the following is in Phobos: https://dlang.org/phobos/std_mathspecial.html#.normalDistributionInverse
Feb 20 2016
prev sibling parent asdf <a b.c> writes:
On Saturday, 20 February 2016 at 14:01:22 UTC, Andrei 
Alexandrescu wrote:
 Do we have a good quality converter of uniform numbers to 
 Gaussian-distributed numbers around? -- Andrei
Forth Engineering Practice™ is to add a few uniform distributions together... http://www.colorforth.com/e-x2.htm Accurate to 2 decimal places!
Feb 28 2016