Глядя на устаревший код в нашем приложении, я нашел эту странную реализацию нормального ГСЧ. Я хочу обменять его на правильное преобразование Бокса-Мюллера, но мне нужна поддержка.
Как видите, он генерирует 5 случайных чисел от -3,875 до +3,875, а затем усредняет их, чтобы получить квазинормально распределенное значение от -1 до +1. Может ли это быть правильным? Как это вообще может работать? Почему 5 образцов?
Кто-нибудь, объясните это:
private double GetRandomNormalNumber()
{
const double SPREAD = 7.75;
const double HALFSPREAD = 3.875;
var random = new Random();
var fRandomNormalNumber = ((random.NextDouble()*SPREAD - HALFSPREAD) +
(random.NextDouble()*SPREAD - HALFSPREAD) +
(random.NextDouble()*SPREAD - HALFSPREAD) +
(random.NextDouble()*SPREAD - HALFSPREAD) +
(random.NextDouble()*SPREAD - HALFSPREAD)
)/5;
return fRandomNormalNumber;
}