Генерация равномерно распределенных случайных чисел

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Генерация равномерно распределенных случайных чисел

Сообщение java73 » 17.03.2017 23:07:04

Меня беспокоит одна сферическо-вакуумная проблема, выросшая, правда, из вполне реального маленького проекта. А именно <заголовок>.
Я прочитал, что встроенный гсч использует алгоритм вихря мерсена, и по идее должен генерировать равномерно распределенные числа.
Я намутил программу для проверки, которая составляет график распределения, так вот нет никакой равномерности на выходе!
Я использую функцию RandomRange.
Есть ли какой-то другой способ получать 100% равномерно распределенные числа?
java73
постоялец
 
Сообщения: 257
Зарегистрирован: 21.11.2013 09:08:10

Re: Генерация равномерно распределенных случайных чисел

Сообщение runewalsh » 17.03.2017 23:31:04

Код: Выделить всё
uses
   Math;

const
   Samples = 1000;
   Rows = 15;

var
   Buckets: array[0 .. 59] of Cardinal;
   Bucket: SizeInt;
   Sample, Row: Cardinal;
   Max: Cardinal = 0;

begin
   FillChar((@Buckets)^, sizeof(Buckets), 0);
   writeln('Samples = ', Samples);

   for Sample := 1 to Samples do
   begin
      Bucket := {(RandomRange(0, length(Buckets)) + RandomRange(0, length(Buckets)) + RandomRange(0, length(Buckets)) + 1) div 3} RandomRange(0, length(Buckets));
      inc(Buckets[Bucket]);
      Max := Math.Max(Max, Buckets[Bucket]);
   end;

   writeln;
   for Row := 1 to Rows do
   begin
      for Bucket := 0 to High(Buckets) do
         if Buckets[Bucket] > Max * (1 - Row/Rows) then
            write('#')
         else
            write(' ');
      writeln;
   end;
   readln;
end.
Изображение
Да вроде всё нормально.
Последний раз редактировалось runewalsh 17.03.2017 23:43:52, всего редактировалось 2 раз(а).
Аватара пользователя
runewalsh
энтузиаст
 
Сообщения: 578
Зарегистрирован: 27.04.2010 00:15:25

Re: Генерация равномерно распределенных случайных чисел

Сообщение java73 » 17.03.2017 23:37:24

Мало чисел беру? Попробую завтра на огромных массивах проверить)
java73
постоялец
 
Сообщения: 257
Зарегистрирован: 21.11.2013 09:08:10

Re: Генерация равномерно распределенных случайных чисел

Сообщение Снег Север » 18.03.2017 09:22:31

https://ru.wikipedia.org/wiki/Тестирование_псевдослучайных_последовательностей
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2993
Зарегистрирован: 27.11.2007 16:14:47

Re: Генерация равномерно распределенных случайных чисел

Сообщение java73 » 18.03.2017 14:45:40

runewalsh писал(а): runewalsh » 17.03.2017 23:31:04

Вы были правы))
Изображение
java73
постоялец
 
Сообщения: 257
Зарегистрирован: 21.11.2013 09:08:10


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 22

Рейтинг@Mail.ru