Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Generate random number between 0 and 1 with gaussian distributes

Tags:

c#

random

I want to write a method in C# to generate a random number with gaussian distributes in range [0:1] ( and in advance in [0-x] ) . I found this code but not work correctly

Random rand = new Random(); //reuse this if you are generating many
double u1 = rand.NextDouble(); //these are uniform(0,1) random doubles
double u2 = rand.NextDouble();
double randStdNormal = Math.Abs( Math.Sqrt(-2.0 * Math.Log(u1)) * 
                                 Math.Sin(2.0 * Math.PI * u2));
like image 968
Yuseferi Avatar asked Apr 12 '13 13:04

Yuseferi


1 Answers

I wrote a blog post on how to generate random numbers with any given distribution:

http://ericlippert.com/2012/02/21/generating-random-non-uniform-data/

Summing up, the algorithm you want is:

  1. Work out the desired probability distribution function such that the area under a portion of the curve is equal to the probability of a value being randomly generated in that range.
  2. Integrate the probability distribution to determine the cumulative distribution.
  3. Invert the cumulative distribution to get the quantile function.
  4. Transform your uniformly-distributed-over-(0,1) random data by running it through the quantile function.

Of course if you already know the quantile function for your desired distribution then you don't need to do steps one through three.

like image 103
Eric Lippert Avatar answered Sep 23 '22 19:09

Eric Lippert