Случайные числа

Случайные числа

Теория

Технически термин «генератор случайных чисел» – это абсурд, так как числа сами по себе не являются случайными. Например, 100 – это случайное число? А 25? Что в действительности означает этот термин, так это то, что создается последовательность чисел, появляющихся случайным образом. Это порождает более сложный вопрос: что такое последовательность случайных чисел? Единственно правильный ответ: последовательность случайных чисел – это последовательность, в которой все элементы являются несвязанными. Это определение приводит к такому парадоксу, что любая последовательность может быть как случайной, так и неслучайной в зависимости от того, как эта последовательность получена. Например, следующая строка чисел
1 2 3 4 5 6 7 8 9 0
была получена печатанием верхней строки клавиатуры по порядку, таким образом, последовательность не может рассматриваться как сгенерированная случайным образом. Но как быть, если вы получите ту же самую последовательность, вынимая пронумерованный теннисные шары из бочонка. В данном случае это уже случайным образом сгенерированная последовательность. Данный пример показывает, что случайность последовательности зависит от того, как она была получена, а не от нее самой.

Помните, что последовательность чисел, сгенерированная компьютером, является детерминированной: каждое число, кроме первого, зависит от предшествующих чисел. Технически это означает, что компьютером может быть сгенерирована только квазислучайная последовательность чисел, т.е. на самом деле они не являются истинно случайными. Однако, этого достаточно для большинства задач и такие последовательности для простоты будут называться случайными. Один очень интересный метод был разработан Джоном фон Нейманом; его часто называют среднеквадратичным. В данном методе предыдущее случайное число возводится в квадрат, а затем из результата выделяются средние цифры. Например, если вы создаете числа из трех цифр, а предыдущее число было 121, то возведение в квадрат дает результат 14641. Выделение трех средних цифр дает следующее случайное число 464. Недостатком данного метода является то, что он имеет очень короткий период повторения, называемый циклом. По данной причине данный метод сегодня не используется. Современные методы генерации случайных чисел значительно сложнее.

Случайные числа в PHP

В PHP есть две группы функций по работе со случайными числами. Чисто внешне их можно отличить по префиксу mt_ у всех функций одной из групп.

Устаревшие функции
Функция rand. Возвращает целое число от нуля до значения RAND_MAX (которое равно 32767). Может иметь два необязательных целых параметра - если они указаны, то генерируется случайное число от первого параметра до второго.

echo rand();
echo rand(1,100); // Выдаем случайное число от 1 до 100

Функция srand. Задает последовательность случайных чисел, выдаваемую функцией rand. Имеет целый параметр - при разных значениях этого параметра rand будет выдавать разные последовательности чисел. Функцию srand достаточно вызвать только один раз перед всеми вызовами функции rand. Пример использования:

srand(1288); // Инициализация генератора случайных чисел
for($i=0; $i<5;$i++){
    echo rand();
    echo "<br>";
}

Внимание! Начиная с версии PHP 4.2.0 не нужно вызывать srand() – PHP делает это автоматически.
Функция getrandmax(). Возвращает значение максимального случайного числа (32767).

Функции второй группы (с префиксом mt_)
Их названия и действия аналогичны функциям первой группы - mt_rand, mt_srand и mt_getrandmax. Основное отличие - что случайные числа берутся из более широкого диапазона: от 0 до 219937 − 1. Более того, эти функции работают значительно быстрее старых аналогов, так как используют генератор случайных чисел Вихрь Мерсенна (Mersenne Twister), разработанный в 1997 японскими учеными. Отсюда и префикс mt_ (Mersenne Twister).
Пример использования:

// Выдаем случайное число от 1000 до 2000
echo mt_rand(1000, 2000);

Случайные числа в JavaScript

Случайное число в JavaScript можно сгенерировать с помощью Math.random(). Однако это будет дробное число в диапазоне от 0 до 1 (не включая 0 и 1). Чтобы сгенерировать случайное целое число в нужном диапазоне необходимо написать свою функцию

<script type="text/javascript">
function getrandom(min_random, max_random) {
    var range = max_random - min_random + 1;
    return Math.floor(Math.random()*range) + min_random;
}
alert(getrandom(2,5));
</script>
#1

пасиб, про mt_rand не знал

Артём Курапов, 12.01.2009 - 18:33
#2

>Возвращает целое число от нуля до значения RAND_MAX
>(которое равно 32767)
Это только на windows такое число, в UNIX - такое же как и для mt_rand().

>Основное отличие - что случайные числа берутся из более
> широкого диапазона: от 0 до 219937 − 1.
в PHP максимальное число, которое Вы получите, это 2^32

Raz0r, 1.02.2009 - 01:31
#3

А Вы не могли бы объяснить, как выбрать несколько чисел?
Например, у меня 9 чисел: 123456789, мне надо из этих чисел вывести ,например, 387 (то есть 3 числа).

Дмитрий, 19.02.2009 - 21:00
#4

функция array_rand()

$array = array(1,2,3,4,5,6,7,9);
$random = array_rand($array,3);
$random - маасив с 3 случайными числами

admin, 19.02.2009 - 21:12
#5

mt_rand - это новость. Запомнил.Спасибо за статью)

xAnder, 8.04.2009 - 14:11
#6

функция array_rand()

$array = array(1,2,3,4,5,6,7,9);
$random = array_rand($array,3);
$random - маасив с 3 случайными числами

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

виктор, 19.09.2009 - 03:07
#7

Или чтоб выдавала список уникальных случайных чисел из заданного диапазона?

виктор, 19.09.2009 - 03:09
#8

RAND
В дос ВЫДАЕТСЯ,В вИН - НЕТ ? а ПОЧЕМУ?

нУ,вЫ И ДАЕТЕ!

зДОРОВО

нАСТОЙЧИВЫЕ И УПЕРТЫЕ!

vojager, 6.11.2009 - 23:01
#9

Не,правда,как оператор "RAND" работает в WIN ?

vojager, 6.11.2009 - 23:05
#10

Необходимо одно,случайным образом сгенерированое число для подстановки

vojager, 6.11.2009 - 23:07
#11

МУЖИКИ,ЕСЛИ ФАНТАЗИИ НЕ ХВАТАЕТ И СГЕНЕРИРОВАТЬ НЕ МОЖЕТЕ,НА КОСТЯХ КИНЬТЕ,НАДО -СРОЧНО - ТУЧА ИДЕТ

vojager, 6.11.2009 - 23:09
#12

Блин а если заюзать неросети? В смысле для генерации псевдослучайных чисел?

Никитос Шмикитос, 23.01.2010 - 13:43
#13

$array = array(1,2,3,4,5,6,7,9);
$random = array_rand($array,3);
$random - маасив с 3 случайными числами

А есть функция, которая сортирует записи массива в случайном порядке?
...

Пример сорировки по маске значений на С++

Циклом заполняем два массива HA и HB случайными числами, после чего прогоняем массив CT через цикл и получаем случайно отсортированные значения от 0 до 255 :) Элементарно :)

unsigned char chBuffer = 0;
for (int segment = 0; segment < 256; segment++){
for (int index = 0; index < 256; index++){
chBuffer = CT[HA[index]];
CT[HA[index]] = CT[HB[index]];
CT[HB[index]] = chBuffer;
}
}

Сумма CT всегда одного значения, повторяющихся значений нет :)

Никитос Шмикитос, 23.01.2010 - 13:46
#14

А есть функция, которая сортирует записи массива в случайном порядке?
функция shuffle()

admin, 23.01.2010 - 14:05
#15

Помогите распределить числа в ячейках Excel случайным образом. Числа нужно распределить так, чтобы сумма всех распределившихся чисел равнялась числу в заданной ячейке.
Например, есть заданное в ячейке число 10. Далее идут месяцы, в которые нужно внести случайным образом целую долю от числа 10, в итоге годовая сумма распределившихся чисел должна быть равной 10.
Это реально?

Сергей, 30.04.2010 - 14:43
#16

mt_rand - это круть, но в DLE не работает
DLE вообще не выполняет PHP, он просто оставляет PHP код в HTML'e и все. Хотя, быть может вся причина в том, что все мои URL'ы на сайте заканчиваются на .html, скорее всего вся суть в этом.

Что по поводу JAVASCRIPT, то он работает - но не так как мне нужно
Он тупо выдает "случайное число" в диалоговом окне со звуком информации из Windows'a - а мне нужно чтобы это "случайное число" тупо писалось на страничке.

Кто может, пожалуйста помогите.
SOS: Хакеры всех стран объединяйтесь!

Либо подскажите как выполнить PHP функцию в DLE.
Либо сделайте на JAVA так, чтобы не вылетало окно и число писалось на странице.

Delacrua, 2.05.2010 - 12:42
#17

SOS: ХАКЕРЫ ВСЕХ СТРАН ОБЪЕДИНЯЙТЕСЬ!!!

ПОМОГИТЕ С ПРЕДЫДУЩЕЙ МЕССАГОЙ - ЧРЕЗВЫЧАЙНО НЕОБХОДИМО!!!

Delacrua, 2.05.2010 - 12:47
#18

Подскажите плиз, можно ли из ряда натуральных чисел образовать псевдослучайные числа по следующему алгоритму:
1. записываем ряд натуральных чисел подряд без пропусков.
2. выбираем число знаков будущего псевдослучайного числа.
3. режем ряд натуральных чисел этим числом знаков.
4. получаем псевдослучайные числа.

Например:
Ряд: 123456789101112131415...
Число знаков: 3
Полученные числа: 123 456 789 101 112 131 415
т.о. мы получил последовательность псевдослучайных чисел.

Собственно вопросы:
1) Являются ли полученные числа равномерно распределёнными на интервале 000-999?
2) Если да, как это доказать?

capporicci, 2.05.2010 - 15:06
#19

всем привет, суть вопроса такова.
Делаю тест.
есть 5 вопросов, нужно чтобы отображалось рандомом 3 вопроса из 5, причем так чтобы в рандоме не было одинаковых вопросов.
Накидал это для общего случая.
Выдает по 1 вопросу рандомом, но может выдать по нескольку раз одно и тоже.

alex, 17.05.2010 - 13:56
#20

блин, чето код не отобразился (

$voprosi = array('v1.php', 'v2.php', 'v3.php', 'v4.php', 'v5.php',);
$vopros = $voprosi[array_rand($voprosi)];
include $vopros;

подскажите плиз, куда капать,
пробовал так

$voprosi = array('v1.php', 'v2.php', 'v3.php', 'v4.php', 'v5.php',);
for($i = 0; $i < 3; $i++)
{
$index = rand(0,count($voprosi) - 1);
include $voprosi[$index];
}

alex, 17.05.2010 - 14:08
#21

1) функция array_rand()
$array = array(1,2,3,4,5);
$random = array_rand($array,3);
$random - получаем маcсив с 3 случайными числами. Только я не уверен что значения не будут повторятся.

2) функция shuffle() - сортирует записи массива в случайном порядке. сортирует весь массив.
$array = array(1,2,3,4,5);
$random = shuffle($array);
$random[0] - случайное значение №1
$random[1] - случайное значение №2
$random[2] - случайное значение №3
$random[3] - случайное значение №4
$random[4] - случайное значение №5

admin, 17.05.2010 - 14:36
#22

спасибо за столь быстрый ответ, попробую, напишу результат

alex, 17.05.2010 - 15:28
#23

"Единственно правильный ответ: последовательность случайных чисел – это последовательность, в которой все элементы являются несвязанными. Это определение приводит к такому парадоксу, что любая последовательность может быть как случайной, так и неслучайной в зависимости от того, как эта последовательность получена. Например, следующая строка чисел
1 2 3 4 5 6 7 8 9 0
была получена печатанием верхней строки клавиатуры по порядку, таким образом, последовательность не может рассматриваться как сгенерированная случайным образом. Но как быть, если вы получите ту же самую последовательность, вынимая пронумерованный теннисные шары из бочонка. В данном случае это уже случайным образом сгенерированная последовательность. Данный пример показывает, что случайность последовательности зависит от того, как она была получена, а не от нее самой."

Ты неграмотный идиот. Учи хотя бы азы теорвера и завязывай бредить. Такой дикой ахинеи я еще не слышал.

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

Вася, 21.02.2011 - 03:17
#24

"""Случайная последовательность - это такая последовательность, для которой не существует алгоритма, способного по произвольной выборке элементов предсказать следующий элемент, придурок ты. До сраки, как эта последовательность получена. Главное, можно ли установить закономерность или нет. Понимаешь, дубина?""""

ЭТО В ПРИНЦИПЕ И ДОКАЗЫВАЕТ ЧТО ВСЕ В МИРЕ ЗАКОНОМЕРНО а не случайно!

как сделать чтобы рандомно, но с непостоянной частотой выдавались значения yes или no на языке PHP?

евг, 18.03.2011 - 18:14
#25

Эта статья полный бред!
"Технически термин «генератор случайных чисел» – это абсурд, .....".
Единственно правильный ответ: последовательность абсурда – это бред, в котором все элементы являются несвязанными.

anyone, 18.03.2011 - 18:46
#26

помогите, пожалуйста, написать программу на JavaScript, нужно определить количество нечётных отрицательных элементов в последовательности целых чисел.

Я, 30.03.2011 - 19:24
#27

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

Rokugan, 21.12.2011 - 15:29
#28

Хрень полная! mt_rand устарела и рабоает точно также как обычный rand!

HelpSet.ru, 17.03.2013 - 14:34
#29

ха я в батник написал там генератор случайных чисел вот код
@echo off
: loop
color 9
Title Dropper

echo %RANDOM%
goto:loop

Dropper, 22.05.2013 - 17:25
#30

http://helpset.ru/ Программа для выигрыша КОД ГОСЛОТО - поищите в поиске! Уже несколько человек выиграли миллионы!!! КОД ГОСЛОТО положительные отзывы!

HelpSet, 15.10.2014 - 20:09
#31

Не могли бы вы объяснить, как работает этот механизм в javascript, когда "max_random - min_random + 1". Зачем +1, например? И остальные этапы тоже. Спасибо!

andrey, 9.01.2015 - 17:15
#32

случайная последовательность - это решение задачи о наименьшей общей строки для 2 в некоторой степени подстрок. Например, для 2*2*2=8 (000 001 010 011 100 101 110 111) решение будет 00010111 или 00011101

recyclebin, 1.05.2015 - 10:10
Оставить комментарий