Форум: "Основная";
Текущий архив: 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