Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.07.25;
Скачать: [xml.tar.bz2];

Вниз

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

 
Демон   (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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.008 c
1-81329
saxon
2002-07-11 21:09
2002.07.25
Word Print


14-81437
Феликс
2002-06-27 12:58
2002.07.25
Фильм


6-81403
Prorva
2002-05-16 00:14
2002.07.25
И сново я, бестолковая:)


1-81276
Andy BitOff
2002-07-15 12:58
2002.07.25
ПОЛНОЕ описание функций Delphi6


1-81319
nick_chay
2002-07-10 16:03
2002.07.25
Edit в рамке





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский