Главная страница


ru.algorithms

 
 - RU.ALGORITHMS ----------------------------------------------------------------
 From : Evgenij Masherov                     2:5020/175.2   23 Oct 2002  20:29:23
 To : Yuri Muhitov
 Subject : Как получать разные числа
 -------------------------------------------------------------------------------- 
 
 Wed Oct 23 2002 19:30, Yuri Muhitov wrote to Evgenij Masherov:
 
  EM>>  Посмотрите randomize()
 
  YM> Это из какой среды / библиотеки / языка ?
  YM> Мне вот посоветовали srand () - стандартный С ( для него и искал ).
 
 Для начала, поскольку эха все же не об особенностях языков/сред, поговорим об
 _алгоритмах_ генерации случайных чисел. Само это название содержит внутреннюю
 противоречивость, поскольку одно из фундаментальнейших свойств алгоритмов -
 определенность, исключающая всякую случайность. Посему алгоритмически мы можем
 создавать только _псевдослучайные_ числа, следующие одно за другим в
 однозначно определенной последовательности. Истинно же случайные числа могут
 быть лишь сняты с некоего устройства, будь то аппаратный датчик на материнской
 плате последних выпусков, электронная рулетка, некогда побежденная Генеральным
 Инспектором Юрковским (и содержавшая, в нашем отражении, источник
 радиоактивного распада,  что делало ее выход принципиально непредсказуемым),
 младшие биты ввода звуковой карты или таймера. Аппаратные ГСЧ имеют
 принципиально невоспроизводимый выход, низкую производительность, недостаточно
 стабильные статистические характеристики и т.п. Поэтому на практике используют
 псевдослучайные генераторы (мультипликативный - когда число, полученное на
 предыдущем шаге, умножают на коэффициент, прибавляют сдвиг и берут остаток по
 модулю, выдают пользователю - и запоминают для следующего вызова; сдвиговый,
 когда элементарные операции - сдвиг битового вектора и исключающее ИЛИ оного с
 маской; середины квадрата, ныне полузабытый, когда, возведя число в квадрат,
 отбрасывают начальные и конечные разряды; Фибоначчиев - и все прочие, знакомые
 тем, кто когда-либо истязал себя Кнутом, т.2, гл.3). Hезависимо от их
 устройства, все они сохраняют состояние от вызова к вызову X(i+1)=f(X(i)), так
 что при каждом запуске программы выдают одну и ту же последовательность чисел.
 Желая получить при разных вызовах разные последовательности - прежде первого
 обращения меняем начальную установку, чем и занимается функция randomize(),
 которая принадлежит к stdlib.h , то есть к самым что ни на есть стандартным
 функциям С и, как можно догадаться, инициализируется по таймеру.
 Функция же srand(seed) столь же однозначно алгоритмична, но, в отличие от
 rand() или random(num) позволяет явно указать начальное значение датчика,
 которое Вы должны при начале работы программы менять, скажем, от таймера, по
 запросу оператора или как-то иначе.
 
 Евгений Машеров АКА СанитарЖеня
 
 --- ifmail v.2.15dev5
  * Origin: FidoNet Online - http://www.fido-online.com (2:5020/175.2)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Как получать разные числа   Yuri Muhitov   23 Oct 2002 16:58:58 
 Как получать разные числа   Evgenij Masherov   23 Oct 2002 19:13:37 
 Как получать разные числа   Yuri Muhitov   23 Oct 2002 19:30:55 
 Как получать разные числа   Evgenij Masherov   23 Oct 2002 20:29:23 
 Как получать разные числа   €«мп Љ ­в®а   23 Oct 2002 21:50:46 
 Как получать разные числа   Max Alekseyev   23 Oct 2002 14:01:08 
 Как получать разные числа   Georgy Plechanov   23 Oct 2002 20:36:12 
 Re: Как получать разные числа   Yuri Muhitov   24 Oct 2002 14:23:31 
 Re: Как получать разные числа   Evgenij Masherov   24 Oct 2002 16:24:21 
 Re: Как получать разные числа   Yuri Muhitov   24 Oct 2002 16:28:21 
 Как получать разные числа   Alexey Kalmykov   26 Feb 2002 14:25:43 
 Re: Как получать разные числа   Evgenij Masherov   24 Oct 2002 18:17:12 
 Как получать разные числа   Stanislav Shwartsman   24 Oct 2002 17:40:43 
 Как получать разные числа   Evgenij Masherov   25 Oct 2002 21:34:14 
 Как получать разные числа   Stanislav Shwartsman   24 Oct 2002 17:42:17 
 Как получать разные числа   Alexander Chelmodeev   24 Oct 2002 21:07:22 
 Re: Как получать разные числа   Valentin Davydov   28 Oct 2002 08:43:42 
Архивное /ru.algorithms/33006db398f2.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional