Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > генератор СВ


Автор: kuvshinka 29.4.2008, 01:18
пож-та подскажите (дайте код)  хороший генератор случайных чисел в диапазоне [0;1]

Автор: Exai1e 29.4.2008, 01:27
а что по вашему мнению хороший генератор ? random не устраивает ?

Автор: Beltar 29.4.2008, 07:26
ЧистА случайнА у Actuba в блоге наткнулся на ссылку на книжку по фундаментальным алгоритмам применительно к Delphi, там так же рассматривался вопрос генерации случайных чисел. Если вас не устраивает генератор Delphi (ну поделите Randon(X)/X получите дроби от 0 до 1 в чем проблема-то?) Можете покурить ее. http://delphist.ru/wp-content/uploads/Backnell.rar Это быстро отобьет желание изобретать велосипед. Всего 38 метров в архиве.

Автор: Poseidon 29.4.2008, 08:25
Цитата(kuvshinka @  29.4.2008,  01:18 Найти цитируемый пост)
пож-та подскажите (дайте код)  хороший генератор случайных чисел в диапазоне [0;1]
Всего 2 строчки...

Код
randomize;
x:= random;


Автор: mmvds 29.4.2008, 09:10
Rand(n+1)=((a*Rand(n)*(m-1)+c)(mod m))/(m-1)
(m-1) кол-во чисел в диапазоне от 0 до 1 чем больше, тем медленнее работает генератор
Rand(1) - первое значение генератора- можешь задать сам, можно через стандартный рэндом сгенерировать диапазон от 0 до 1
a, c - свободные коэффициенты, можно тоже задать жестко или для пущей надежности рэндомом делать, a, c лучше брать не большими, чем они больше, тем медленнее генерируются числа.
По сути это тот же паскалевский генератор, но в паскале они генерируются 1 раз для всех последовательностей, если без randomize и 1 раз для 1 последовательности, если с randomize, а тут все параметры можно задать самому, или генерировать их каждый раз через стандартный рэндом. 
Правда данный рэндом будет работать гораздо медленнее стандартного, но это заметно только при сравнении времени на большом количестве чисел.

Автор: kuvshinka 29.4.2008, 09:56
Exai1e -  "хороший" генератор - генератор с равномерным распределением CD в заданном диапазоне (от 0 до 1)



Автор: Poseidon 29.4.2008, 10:37
kuvshinka, ты понимаешь что такие величины не будут абсолютно случайными, т.е. если случайно точка попала в левую часть дивпозона, то повторно ей нужно попасть в правую часть, что бы добится равномерного распределения по диапазону. А это уже будет псевдослучайная величина, т.к. мы ей говорим что нужно попасть в правую часть.

Раз уж на то пошло, то "Хороший" генератор - это генератор, который не зависет от внешних факторов. Который выдает абсолютно случайные величины. Получить такое не реально! Random таким быть не может, потому как он выдает величины из определенной последовательности. Randomize всего-лишь "сдвигает" последовательность Random в зависемости от системного времени (т.е. имеет зависемость от времени). Поэтому все же придется определить для себя, что подходит для "случайности". Если системное время подходит, то используй Randomize. Если нет, можешь привязаться к тактам процессора в момент запуска генератора, положению Земли относительно Солнца, и т.п.  smile 

Автор: Esperito 2.5.2008, 20:21
Random хороший.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)