Главная страница
    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.006 c
1-81370
Goblinus
2002-07-13 19:18
2002.07.25
Convert


14-81446
Scooter
2002-06-27 15:52
2002.07.25
Народ, если поможете, буду очень благодарен!!


1-81288
ctapik-net
2002-07-12 07:37
2002.07.25
Локализация приложения под другие языки.


1-81220
Sachem
2002-07-14 11:03
2002.07.25
Как узнать от какого компанента произошло событие


1-81280
Explorer
2002-07-12 15:30
2002.07.25
Childs окна





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский