What is the purpose of using a custom random number generator with a Gaussian distribution in PHP?

When generating random numbers in PHP, the built-in rand() function provides a uniform distribution, meaning each number has an equal chance of being selected. However, in some cases, we may need random numbers that follow a Gaussian distribution (also known as a normal distribution) to better simulate real-world scenarios or for statistical analysis. To generate random numbers with a Gaussian distribution in PHP, we can create a custom function that uses the Box-Muller transform to convert uniformly distributed random numbers into normally distributed ones. This involves generating two random numbers between 0 and 1, transforming them into standard normal deviates, and then scaling and shifting them as needed.

function gaussianRandom() {
    static $next = null;
    $next = $next === null ? 0 : $next;
    
    if ($next !== null) {
        $rand1 = $next;
        $next = null;
    } else {
        do {
            $u1 = 2 * mt_rand() / mt_getrandmax() - 1;
            $u2 = 2 * mt_rand() / mt_getrandmax() - 1;
            $squared = $u1 * $u1 + $u2 * $u2;
        } while ($squared >= 1 || $squared == 0);
        
        $multiplier = sqrt(-2 * log($squared) / $squared);
        $rand1 = $u1 * $multiplier;
        $next = $u2 * $multiplier;
    }
    
    return $rand1;
}

// Generate 10 random numbers with Gaussian distribution
for ($i = 0; $i < 10; $i++) {
    echo gaussianRandom() . PHP_EOL;
}