Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Теория программирования > Алгоритмы
Перезагрузить страницу Генератор случайных чисел
Ответ
 
Опции темы Опции просмотра
  (#16 (permalink)) Старый
TSerg TSerg вне форума
Member
 
Сообщений: 19
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 11.05.2005
По умолчанию 14.05.2005, 13:00

Прежде чем говорить о точности, неплохо бы в теорию и практику заглянуть.

Стандартным методом моделирования требуемого распределения является метод обратной функции.
Обратная функция плотности нормального распределения не представима в относительно простом виде и поэтому выполняется ее аппроксимация.

Известной аппроксимацией является
X = (1/K)*Ln((1+R)/(1-R))
где R- равномерное распределение [0,1)

На основе подобной аппроксимации создан один из наиболее широко применяемых генераторов

Код:
function RandG_(vMean, vStdDev: Double): Double;
{ Marsaglia-Bray algorithm }
var
  U1, S2: Extended;
begin
  repeat
    U1 := 2*Random - 1;
    S2 := Sqr(U1) + Sqr(2*Random-1);
  until S2 < 1;
  Result := Sqrt(-2*Ln(S2)/S2) * U1 * vStdDev + vMean;
end;
Ваш пример, тоже рабочий, но распределение значительно усечено и размах около 9, в то время как для приведенного 10 и выше.
Ответить с цитированием
  (#17 (permalink)) Старый
Кошмар Кошмар вне форума
Member
 
Сообщений: 2,694
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Регистрация: 23.04.2005
По умолчанию 29.05.2005, 16:46

Блин...
Как рандомизировать начальное значение генератора равн. случ. чисел rand(); ?
А то фикция какая-то получается....


импортирован с progz.ru
Ответить с цитированием
  (#18 (permalink)) Старый
TSerg TSerg вне форума
Member
 
Сообщений: 19
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 11.05.2005
По умолчанию 08.06.2005, 14:47

Можно так:

Код:
procedure Randomize_RDTSC;
begin
 asm
   push        eax
   push        edx
   dw 310Fh // rdtsc
   mov         dword ptr randseed[0],eax
   pop         edx
   pop         eax
 end;
end;
Ответить с цитированием
  (#19 (permalink)) Старый
wanja wanja вне форума
Member
 
Сообщений: 588
Сказал(а) спасибо: 1
Поблагодарили 25 раз(а) в 25 сообщениях
Регистрация: 08.05.2005
По умолчанию 21.06.2005, 14:48

Код:
gamma1:=random;
gamma2:=random;
ro:=sqrt(-2*ln(gamma1));
fi:=gamma2*2*pi;
x[i]:=ro*cos(fi);
Потом, если нало, умножить на дисперсию и прибавить МО.
Как выводится - не помню.
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Генератор случайных чисел skrara С/С++ 1 11.10.2011 10:51
Генератор случайных чисел, не запускается ERMAK_XOY C++ Builder 2 12.06.2011 23:29
Генератор случайных чисел imported_katarios Pascal 0 12.02.2011 14:08
Список из случайных чисел... Webgirl Prolog 2 22.12.2009 21:05
Генератор случайных чисел в с++ builder Marla Singer Вопросы начинающих программистов 3 28.11.2007 23:23
генератор случайных чисел Alena&#33; Вопросы начинающих программистов 0 26.10.2006 15:41
Генератор случайных чисел tester123 Prolog 5 15.05.2006 10:52
Генератор случайных чисел типа double vafrolov Алгоритмы 3 04.04.2006 06:42
Генератор случайных чисел nymbos С/С++ 6 10.07.2005 15:43
Реальный генератор случайных чисел Borro Алгоритмы 16 04.06.2005 22:57
Генерация случайных чисел kettle DHTML, JavaScript, VBScript 4 19.05.2004 19:22
Генератор случайных чисел Вова C++ Builder 3 22.03.2004 13:22



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов