Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.07.25;
Скачать: CL | DM;

Вниз

Про генератор случайных чисел   Найти похожие ветки 

 
Демон   (2002-07-11 23:45) [0]

Функции Randomize и Rand(x) возвращают из массива от 0 до x случайное значение и впредь его не повторяют...
Вопрос: какая функция также возвращает случайное значение из данного массива, но это значение может повторяться??


 
Юрий Зотов ©   (2002-07-12 00:31) [1]

Та же самая Random(x), но СТРОГО без предварительного вызова Randomize.

При каждом запуске программы она будет выдавать ОДНУ И ТУ ЖЕ последовательность случайных чисел в диапазоне 0..x. Это используется, например, при отладке, а после отладки перед первым вызовом Random (только в одном месте!) вставляется Randomize (инициализирует датчик случайных чисел по текущей дате и времени, что и приводит к генерации новой последовательности).

Строго говоря, эти числа всегда ПСЕВДОслучайные, но период их повторения настолько велик, что на практике их можно считать случайными. Распределение - равномерное.



 
IlyaA   (2002-07-12 08:12) [2]

Делай сумму 2-х или более Random"ов. Тогда у тебя могут получиться повторные числа


 
BAY ©   (2002-07-12 09:09) [3]

По моему Randomize присваивает переменной RandSeed значение таймера. Т.е. для каждого значения RandSeed определена неизменная последовотельность чисел.


 
PVOzerski ©   (2002-07-12 10:42) [4]

А кто сказал, что функция Random(x) обеспечивает последовательность НЕповторяющихся случайных чисел? Никогда такого не слышал и не наблюдал. Угодно пример?

program Project1;
{$apptype console}
var
i:longint;
begin
randomize;
for i:=1 to 10 do
writeln(Random(10));
readln;
end.

На экран вывела у меня сейчас (ясно, что в другой раз результат будет, скорее всего, иным - из-за Randomize):
8
2
2
9
1
1
9
2
7
4
Как видите, значение 2 выскочило 3 раза, значение 1 - 2 раза. IMHO, наоборот, получить последовательность неповторяющихся чисел более сложно.


 
Anatoly Podgoretsky ©   (2002-07-12 11:21) [5]

А зачем так испытывать, проще надо жить for I := 1 to 100 WriteLn(Random(10)); создаст неповторяющую последовательность из 100 чисел, каждое из которых не более 9


 
Anatoly Podgoretsky ©   (2002-07-12 11:23) [6]

Извиняюсь, конечно имелось в виду не последовательность, а не повторяющиеся числа


 
AL2002 ©   (2002-07-12 11:29) [7]

Удалено модератором


 
MBo ©   (2002-07-12 11:35) [8]

>AL2002
Любой, кто в исходники заглянет


 
Anatoly Podgoretsky ©   (2002-07-12 11:40) [9]

AL2002 © (12.07.02 11:29)
Ты хочешь переаись провести?


 
Anatoly Podgoretsky ©   (2002-07-12 11:41) [10]

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


 
AL2002 ©   (2002-07-12 11:56) [11]

Удалено модератором


 
PVOzerski ©   (2002-07-12 12:17) [12]

Псевдослучайные числа - на самом деле результат некой математической функции. Что это такое точнее - можно, например, посмотреть в исходниках system.pas (_RandInt, _RandExt).


 
BAY ©   (2002-07-12 12:25) [13]

>>какая функция также возвращает случайное значение из данного массива, но это значение может повторяться??

Это же компьютер, а не матан. Random может вернуть лишь определенное количество значений (8 байт), а значит значения будут повторяться, вопрос только когда.


 
Anatoly Podgoretsky ©   (2002-07-12 12:27) [14]

AL2002 © (12.07.02 11:56)
"А кто знает, как "рождаються" случайные числа?"
Пытаешь провести перепись эьиъ людей, интересно конечно.


 
BAY ©   (2002-07-12 12:33) [15]

>>PVOzerski
Точно. Это параметрическая функция с непрерывным равномерным распределением вероятностей (continuous uniform probability distribution. :) RandSeed - параметр этой функции.


 
AL2002 ©   (2002-07-12 14:07) [16]

Удалено модератором


 
Viewer   (2002-07-12 14:50) [17]

Что-то вопросы больно темный для твоего заявленного "высшего" образования. Здесь ведь их не дадут.
Поищи опубликованные статьи в Инете:
генерация случайных чисел


 
handra ©   (2002-07-12 16:52) [18]

IlyaA > Суммировать значения нельзя, нарушается форма респределения (т.е. числа, находящиеся в середине интервала будут повторяться чаще)
~~~~~~~
Линейный конгруэнтный генератор псевдослучайных чисел (ПСЧ).
Выглядит так: Tn+1 = ((A*Tn) + C) mod M,
где:
A - множитель, такой, что (A mod 4)=1, т.е., например,5,9,13...
С - коэффициент, должен быть нечетным.
М - модуль, должен быть степенью двойки, например, 8,16,32,64...
Т0 - "порождающее число" - может быть любым целым.
Все эти условия должны быть обязательно выполнены. Генератор выдает псевдослучайную последовательность в диапазоне 0..М, причем каждое число встречается только один раз.



 
Malder ©   (2002-07-12 17:12) [19]

Я вас до сиз пор не понял.
С чего вы решили, что Random возвращает НЕПОВТОРЯЮЩИЕСЯ ЧИСЛА ?

вопрос не имеет смысла...


 
Viewer   (2002-07-12 17:25) [20]

Кто это решил ?
Ни один программный ГСЧ не выдает неповторяющихся чисел.
По другому они называются датчики псевдослучайных последовательностей (ДСП). Что и означает повторение последовательности с некоторым известным,хотя и большим, периодом. В пределах периода числа выдаются случайным образом, т.е. и повторяющиеся, в том числе.
Проектирование датчика с неповторяющимися значениями в пределах периода - отдельная, да и не слишком востребованная задача.



Страницы: 1 вся ветка

Текущий архив: 2002.07.25;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.013 c
1-81260
CA
2002-07-13 07:53
2002.07.25
матем


3-81173
Draculenok
2002-07-04 11:44
2002.07.25
Как ввести Заглавную букву


8-81390
petyun
2002-03-15 08:59
2002.07.25
две звуковухи


1-81349
olookin
2002-07-13 13:18
2002.07.25
Запись Variant в файл


8-81383
Просто чел
2002-03-20 01:13
2002.07.25
Flash ролик в Delphi