Different probability for ranges of random numbers

前端 未结 2 1759
感情败类
感情败类 2021-01-03 05:30

I\'m looking for the best way of implementing random number generator, that will allow me to have control over probability from what range the generated number will be retur

2条回答
  •  清酒与你
    2021-01-03 06:09

    It sounds to me like what you're looking for is a way to generate numbers on a normal (or Gaussian) distribution (take a look at the Wikipedia page if you don't know what that means).

    The Box-Muller transformation can be used to generate pairs of normally distributed numbers.

    Here is a c++ implementation of the polar form of the Box-Muller transformation that shouldn't be hard to translate to javascript.

    // Return a real number from a normal (Gaussian) distribution with given
    // mean and standard deviation by polar form of Box-Muller transformation
    double x, y, r;
    do
    {
        x = 2.0 * rand() - 1.0;
        y = 2.0 * rand() - 1.0;
        r = x * x + y * y;
    }
    while ( r >= 1.0 || r == 0.0 );
    double s = sqrt( -2.0 * log(r) / r );
    return mean + x * s * stddev;
    

    Where mean is the mean of the normal distribution and stddev is the Standard Deviation of the distribution. This code is from a MersesenneTwister C++ class that I've been using recently that you can find on Rick Wagner's page. You can find some more useful information about the Box-Muller transformation on this page.

提交回复
热议问题