Язык C++
Случайное число
Модератор: Модераторы разделов
-
KnupK
- Сообщения: 65
- ОС: openSUSE 10.2 x86_64
-
moog
- Сообщения: 599
- ОС: Archlinux
Re: Случайное число
Купите нормальную книгу по программированию.
-
WiZ
- Сообщения: 60
Re: Случайное число
Давайте вы сначала будете искать в интернете, а потом, если уж не найдёте - спрашивать на форуме? int rand();
Arch / Linux-ck 64bit / xmonad / vim,opera,deadbeef,zsh /
-
uptime
- Сообщения: 1661
- Статус: Drinker with computing problems
- ОС: kubuntu 8.04
Re: Случайное число
Для получения собственно числа использовать rand().
Предварительно нужно рандомизировать стартовое число случайной последовательности (зено = seed), делается с помощью srand(), которой в качестве параметра можно передавать, например, текущее время.
Предварительно нужно рандомизировать стартовое число случайной последовательности (зено = seed), делается с помощью srand(), которой в качестве параметра можно передавать, например, текущее время.
The answer, my friend, is blowin' in the wind.
The answer is blowin' in the wind.
The answer is blowin' in the wind.
-
v04bvs
- Сообщения: 636
- ОС: Debian GNU/Linux
-
Denjs
- Сообщения: 1685
- ОС: SuSe 10.2
Re: Случайное число
а ещё есть "алгоритмы получения псевдо-случайных чисел" )))
рыть яндекс - потому как говорят что rand() не выдерживает никакой критики по своим статистическим свойствам )
по крайне мере "ХорошийГенераторПсевдоСлучайныхЧисел" должен генерировать "равномерно-распределенные числа" (а если нам надо какое-то иное распределение получаемых чисел - это потом можно всегда преобразовать во что нужно)
копайте яндекс если вас int rand() не устраивает )))
вообще вопрос серьезный. Параметры хороших генераторов псевдослучайных чисел кажется приравниваются к гос.тайне
хотя для "их проблем" лучше использовать аппаратные генераторы
рыть яндекс - потому как говорят что rand() не выдерживает никакой критики по своим статистическим свойствам )
по крайне мере "ХорошийГенераторПсевдоСлучайныхЧисел" должен генерировать "равномерно-распределенные числа" (а если нам надо какое-то иное распределение получаемых чисел - это потом можно всегда преобразовать во что нужно)
копайте яндекс если вас int rand() не устраивает )))
вообще вопрос серьезный. Параметры хороших генераторов псевдослучайных чисел кажется приравниваются к гос.тайне
хотя для "их проблем" лучше использовать аппаратные генераторы
-
Kasper_WPS
- Сообщения: 312
- ОС: Gentoo
Re: Случайное число
Создание уникального имени файла Я уже задовал в этом разделе такой же вопрос! В поиск... Используется генератор на Си, доделать плевое дело, только я не спец в паласах.
Случайное число в пределах от a до b: a + rand() % (b+1-a)
Gentoo Linux - Stage1 - Core2 Q6600 Quad - 2008.0
Kernel: Gentoo-sources - 2.6.36 GCC 4.5.1
XOrg-server 1.9.2 (NVIDIA-9600GT), KDE4 4.5.4
Kernel: Gentoo-sources - 2.6.36 GCC 4.5.1
XOrg-server 1.9.2 (NVIDIA-9600GT), KDE4 4.5.4
-
Kasper_WPS
- Сообщения: 312
- ОС: Gentoo
Re: Случайное число
Denjs писал(а): ↑17.03.2007 14:51а ещё есть "алгоритмы получения псевдо-случайных чисел" )))
рыть яндекс - потому как говорят что rand() не выдерживает никакой критики по своим статистическим свойствам )
по крайне мере "ХорошийГенераторПсевдоСлучайныхЧисел" должен генерировать "равномерно-распределенные числа" (а если нам надо какое-то иное распределение получаемых чисел - это потом можно всегда преобразовать во что нужно)![]()
копайте яндекс если вас int rand() не устраивает )))
вообще вопрос серьезный. Параметры хороших генераторов псевдослучайных чисел кажется приравниваются к гос.тайне![]()
хотя для "их проблем" лучше использовать аппаратные генераторы
Мне как-то показывали книжку с таблицей равномерно распределенных случайных чисел, на двухстах листах, циферки, для выбора числа закрывают глаза, открывают страницу, тыкают пальцем. Вот чем Вам не алгоритм?
Gentoo Linux - Stage1 - Core2 Q6600 Quad - 2008.0
Kernel: Gentoo-sources - 2.6.36 GCC 4.5.1
XOrg-server 1.9.2 (NVIDIA-9600GT), KDE4 4.5.4
Kernel: Gentoo-sources - 2.6.36 GCC 4.5.1
XOrg-server 1.9.2 (NVIDIA-9600GT), KDE4 4.5.4
-
Uncle_Theodore
- Сообщения: 3339
- ОС: Slackware 12.2, ArchLinux 64
Re: Случайное число
В зависимости от того, надо вам шашечки или ехать, надо читать /dev/random или /dev/urandom (если нужны действительно случайные биты). Случайные числа можно получить только из шума.
А если сдать лабу и забыть, то можно пользоваться средствами C++. Алгоритмы изготовления "случайных" чисел очень просты, но ничего случайного в этих числах нет.
А если сдать лабу и забыть, то можно пользоваться средствами C++. Алгоритмы изготовления "случайных" чисел очень просты, но ничего случайного в этих числах нет.
-
elide
- Бывший модератор
- Сообщения: 2421
- Статус: Übermensch
- ОС: лялих
Re: Случайное число
maybe /dev/urandom ?/dev/random или /udev/random
кстати, довольно интересные факты: http://vitus-wagner.livejournal.com/141948.html
слава роботам!
-
Uncle_Theodore
- Сообщения: 3339
- ОС: Slackware 12.2, ArchLinux 64
Re: Случайное число
elide писал(а): ↑17.03.2007 22:38maybe /dev/urandom ?/dev/random или /udev/random
кстати, довольно интересные факты: http://vitus-wagner.livejournal.com/141948.html
Поправил, сенькс.
Можно прогнать и более интересные тесты на равномерную распределенность того, что читается с рэндомных девайсов. Мы со студнями делали прошлой осенью. Достаточно интересные графики получаются.
-
alastor
- Сообщения: 844
- Статус: ARCH'еноид
- ОС: Arch Linux current
Re: Случайное число
Помнится, разработчики какой-то из *BSD попросили всех пользователей присылать случайно набранные строки, как раз для улучшения качества случайного генератора 
-
serzh-z
- Бывший модератор
- Сообщения: 8259
- Статус: Маньяк
- ОС: Arch, Fedora, Ubuntu
Re: Случайное число
Вывод netstat чем не случайное число... Вам смешно, а разработчки Firefox так не считают.(KnupK @ Mar 17 2007, в 09:30) писал(а):Как получить сабж?
-
promov
- Сообщения: 384
- Статус: Участник
- ОС: Debian GNU/Linux
Re: Случайное число
Друзья! Дабы не создавать новую тему, прошу просвятит меня в этой. Смотрите, вот программа
Результаты работы этой программы, сказать прямо, обескураживают. ОНа всегда выдаёт один и тот же результат. И когда её переименовываешь, и в другом окне запускаешь, результат всегда один и тот же:
Число 254512044 и число 658784713. От генератора случайных чисел я, признаться, ожидал большей непредсказуемости.
То, каким будет первое значение переменной а, зависит от аргумента, переданного нами в функцию srand. А теперь, собственноо вопрос: от чего зависит последующие значения переменной а?
Если тоже от этого аргумента- это ещё куда ни шло, с этим я смирюсь- в качестве его я смогу передавать туда текущее время (правда, я не знаю, как это делать), а коль скоро время разно, то можно надеяться, что и значения переменной а будут тоже различаться. Но! Если значение переменной а зависит от предыдущего значения а, тогда это очень плохо. Получается, если однажды в программе первое а стало равно х и все последующие значения а приняли какие-то значание и в другой программе первое а приняло значение х, то все последующие значения а я смогу точно назвать до последней цифры- они будут такие же, как и в первой программе. Какая же это случайность? Вполне даже предсказуемые значения. Это-то вот и плохо. ПРошу развеять мои сомнения.
А в книгах на этот счёт мало что сказано, типа:"int rand (void) возвращает случайное число в диапазоне [0, RAND_MAX], где RAND_MAX определён в файле stdlib.h и имеет миимальное значение 32767. См. также функцию srand". Всё.
Код: Выделить всё
#include <stdio.h>
#include <stdlib.h>
int main ()
{
int a, i;
srand (1337087948);
for (i= 0; i<= 1; ++ i){
a= rand();
printf ("%i\n", a);
}
return 0;
}Результаты работы этой программы, сказать прямо, обескураживают. ОНа всегда выдаёт один и тот же результат. И когда её переименовываешь, и в другом окне запускаешь, результат всегда один и тот же:
Число 254512044 и число 658784713. От генератора случайных чисел я, признаться, ожидал большей непредсказуемости.
То, каким будет первое значение переменной а, зависит от аргумента, переданного нами в функцию srand. А теперь, собственноо вопрос: от чего зависит последующие значения переменной а?
Если тоже от этого аргумента- это ещё куда ни шло, с этим я смирюсь- в качестве его я смогу передавать туда текущее время (правда, я не знаю, как это делать), а коль скоро время разно, то можно надеяться, что и значения переменной а будут тоже различаться. Но! Если значение переменной а зависит от предыдущего значения а, тогда это очень плохо. Получается, если однажды в программе первое а стало равно х и все последующие значения а приняли какие-то значание и в другой программе первое а приняло значение х, то все последующие значения а я смогу точно назвать до последней цифры- они будут такие же, как и в первой программе. Какая же это случайность? Вполне даже предсказуемые значения. Это-то вот и плохо. ПРошу развеять мои сомнения.
А в книгах на этот счёт мало что сказано, типа:"int rand (void) возвращает случайное число в диапазоне [0, RAND_MAX], где RAND_MAX определён в файле stdlib.h и имеет миимальное значение 32767. См. также функцию srand". Всё.
Зачем хорёк пошел в ларёк, зачем барсук полез на сук...
Мораль легко уразуметь: зачем на бал пришёл медведь?
Мораль легко уразуметь: зачем на бал пришёл медведь?
-
Liksys
- Сообщения: 2910
Re: Случайное число
srand() передай время текущее! Читай предыдущие посты!
-
promov
- Сообщения: 384
- Статус: Участник
- ОС: Debian GNU/Linux
Re: Случайное число
Так я читал всё. Передам я текущее время. Дело-то не в этом. Дело-то в том на что этот аргумент будет влиятьпрямо , но не косвенно: на начальное значение генератора случайных чисел или на все значения, которые генератор случайных чисел вырабатывает в текущей программе?
Зачем хорёк пошел в ларёк, зачем барсук полез на сук...
Мораль легко уразуметь: зачем на бал пришёл медведь?
Мораль легко уразуметь: зачем на бал пришёл медведь?
-
Uncle_Theodore
- Сообщения: 3339
- ОС: Slackware 12.2, ArchLinux 64
Re: Случайное число
promov писал(а): ↑29.11.2007 16:08Так я читал всё. Передам я текущее время. Дело-то не в этом. Дело-то в том на что этот аргумент будет влиятьпрямо , но не косвенно: на начальное значение генератора случайных чисел или на все значения, которые генератор случайных чисел вырабатывает в текущей программе?
На все значения, возвращаемые функцией rand() до тех пор, пока Вы не вызовете srand() снова.
-
v04bvs
- Сообщения: 636
- ОС: Debian GNU/Linux
-
ber
- Сообщения: 13
- ОС: Gentoo
Re: Случайное число
потому что ты каждый раз передаешь одно и то же время. если не ошибаюсь, надо так
далее по тексту
Код: Выделить всё
#include <stdlib.h>
#include <time.h>
int main()
{
srand(time(NULL));
}далее по тексту
-
promov
- Сообщения: 384
- Статус: Участник
- ОС: Debian GNU/Linux
Re: Случайное число
Uncle_Theodore писал(а): ↑29.11.2007 16:17promov писал(а): ↑29.11.2007 16:08Так я читал всё. Передам я текущее время. Дело-то не в этом. Дело-то в том на что этот аргумент будет влиятьпрямо , но не косвенно: на начальное значение генератора случайных чисел или на все значения, которые генератор случайных чисел вырабатывает в текущей программе?
На все значения, возвращаемые функцией rand() до тех пор, пока Вы не вызовете srand() снова.
Прояснено. Спасибо!
Зачем хорёк пошел в ларёк, зачем барсук полез на сук...
Мораль легко уразуметь: зачем на бал пришёл медведь?
Мораль легко уразуметь: зачем на бал пришёл медведь?
-
drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: Случайное число
Для математических программ всё-таки лучше rand() не использовать. Уж больно она неравномерная и не случайная в большинстве библиотек. Для не слишком сложных случаев лучше будет x(i+1) = (x(i) * 29 + 0x7A4537ED) mod 2^32 Эта формула даёт псевдослучайное число от 0 до 2^32-1 причём её период достаточно большой.
-
edranovdenis
- Сообщения: 135
- ОС: main mdv2006
Re: Случайное число
в чем-то вопрос филосовский...
теоритически, нет ничего случайного, все взаимосвязано. вот только просчитать ВСЕ зависимости мы не в состоянии. вот тут и беруться случайности. например, возьмем две или более относительно замкнутых, и логически последовательных системы. поведение этих систем внутри себя и при взаимодействии с внешней средой будет всегда определенным, т.е. лишеным случайности. в случае взаимодействия нескольких таких систем может появиться, а может и нет эффект случайности. необходимыми условиями появления такого эффекта будут ассинхронность поведения и ассинхронность времени. например: рулетка - в ее поведении нет случайности, и человек не способный просчитать ее поведение. равномерное распределение достигается же ведением статистики и изменением размеров полей на рулетке. (мухлёж). вот такие мысли...
теоритически, нет ничего случайного, все взаимосвязано. вот только просчитать ВСЕ зависимости мы не в состоянии. вот тут и беруться случайности. например, возьмем две или более относительно замкнутых, и логически последовательных системы. поведение этих систем внутри себя и при взаимодействии с внешней средой будет всегда определенным, т.е. лишеным случайности. в случае взаимодействия нескольких таких систем может появиться, а может и нет эффект случайности. необходимыми условиями появления такого эффекта будут ассинхронность поведения и ассинхронность времени. например: рулетка - в ее поведении нет случайности, и человек не способный просчитать ее поведение. равномерное распределение достигается же ведением статистики и изменением размеров полей на рулетке. (мухлёж). вот такие мысли...
Живая мысль подобна реке бегущей с гор - будучи полноводной, не засохнет, но непременно впадет в океан.
-
Uncle_Theodore
- Сообщения: 3339
- ОС: Slackware 12.2, ArchLinux 64
Re: Случайное число
Математически случайное число можно получить из белого теплового шума. Который и собирается в /dev/random
Кроме того, квантовая динамика отрицает детерминированность. Поэтому вышеприведенные рассуждения о детерминированности замкнутых систем неверны.
Кроме того, квантовая динамика отрицает детерминированность. Поэтому вышеприведенные рассуждения о детерминированности замкнутых систем неверны.
-
nesk
- Сообщения: 2268
- Статус: Линукссаксовец
- ОС: MS Windows XP Home SP3
Re: Случайное число
да простят меня модераторы.
немного бородатого юмора, что бы разрядит обстановку.

* А здесь у нас генератор случайных чисел.
* Девять, девять, девять, девять, девять, девять...
* А вы уверены, что они случайные?
* В этом проблема. Со случайностями никогда нельзя быть уверенным.

"честно выбрано броском игрального кубика. Гарантировано вернёт случайное"
немного бородатого юмора, что бы разрядит обстановку.

* А здесь у нас генератор случайных чисел.
* Девять, девять, девять, девять, девять, девять...
* А вы уверены, что они случайные?
* В этом проблема. Со случайностями никогда нельзя быть уверенным.

"честно выбрано броском игрального кубика. Гарантировано вернёт случайное"
Внимание: У меня под рукой нет машины с Linux. Я не использую эту ОС. Ответы я даю либо по памяти, либо мне помогает гугл. Тщательно читайте маны по тем командам и конфигурационным файлам, которые я упоминаю.
0xDEFEC8ED
0xDEFEC8ED
-
edranovdenis
- Сообщения: 135
- ОС: main mdv2006
Re: Случайное число
ПС: т.е. для получения случайности необходимо найти места взаимодействия двух или более таких систем с высоким значением условий необходимых для возникновения эффекта.
Живая мысль подобна реке бегущей с гор - будучи полноводной, не засохнет, но непременно впадет в океан.
-
Zeus
- Сообщения: 694
Re: Случайное число
edranovdenis писал(а): ↑03.12.2007 17:01в чем-то вопрос филосовский...
теоритически, нет ничего случайного, все взаимосвязано.
При изучении диамата есть целый раздел: "Случайность и закономерность".
Утверждается, что случайность, как и детерминированность объективно присущи материальному миру.
-
edranovdenis
- Сообщения: 135
- ОС: main mdv2006
Re: Случайное число
замкнутые системы - условны. случайность - условна, по отношению к одной или нескольким системам. если удается рассмотреть группу систем как одну, то взаимодействия между ними уже определены. определености - условны.
имею мнение, что квантовая механика - частный случай кибернетики...
имею мнение, что квантовая механика - частный случай кибернетики...
Живая мысль подобна реке бегущей с гор - будучи полноводной, не засохнет, но непременно впадет в океан.
-
Uncle_Theodore
- Сообщения: 3339
- ОС: Slackware 12.2, ArchLinux 64
Re: Случайное число
edranovdenis писал(а): ↑03.12.2007 20:13имею мнение, что квантовая механика - частный случай кибернетики...
Вы его, конечно, имейте, но волновая функция коллапсирует к случайному собственному значению оператора измерения. Вероятность выпадения конкретного значения (измерения характеристики системы) зависит от квадрата модуля коэффициента функции в разложении ее по собственным векторам этого оператора.
-
promov
- Сообщения: 384
- Статус: Участник
- ОС: Debian GNU/Linux
Re: Случайное число
Друзья, раз уж вы продолжаете разговор, прояснили бы, что такое генератор случайных чисел. Я это спрашиваю потому, что некоторые ребята сомневаются в том, что числа, возвращаемые им настолько случайны, что их можно использовать именно как случайные без всяких дополнительных оговорок.
Теперь о моей готовности воспринять такие сведения.
Давно я написал маленькую программу на Turbo Pascal, которая печатала n целых положительных неповторяющихся чисел, каждое из которых было не больше n- это псевдослучайность. В общем, каждое число по сути было значением функции f (x), где x- предыдущее напечатанное число. Функция было сложновата. не то, что f(x)= x+1. Но всё-таки, если число было, допустим 34, то это же число второй раз выпасть не могло, пока все остальноые числа не выпадут. Я использовал, помнится, n= 50. Понятно, что если напечатано 48 чисел, то выпадение 49 мы предскажем с вероятностью не 2%, а 50%.
Если генератор случайных чисел- аналог такой программы, то это одно, а если он аналог мешка с n пронумерованными шарами, и каждый раз мы вытаскиваем по одному шару, то это совсем другое дело, это гораздо лучше.
Теперь о моей готовности воспринять такие сведения.
Давно я написал маленькую программу на Turbo Pascal, которая печатала n целых положительных неповторяющихся чисел, каждое из которых было не больше n- это псевдослучайность. В общем, каждое число по сути было значением функции f (x), где x- предыдущее напечатанное число. Функция было сложновата. не то, что f(x)= x+1. Но всё-таки, если число было, допустим 34, то это же число второй раз выпасть не могло, пока все остальноые числа не выпадут. Я использовал, помнится, n= 50. Понятно, что если напечатано 48 чисел, то выпадение 49 мы предскажем с вероятностью не 2%, а 50%.
Если генератор случайных чисел- аналог такой программы, то это одно, а если он аналог мешка с n пронумерованными шарами, и каждый раз мы вытаскиваем по одному шару, то это совсем другое дело, это гораздо лучше.
Зачем хорёк пошел в ларёк, зачем барсук полез на сук...
Мораль легко уразуметь: зачем на бал пришёл медведь?
Мораль легко уразуметь: зачем на бал пришёл медведь?
-
Uncle_Theodore
- Сообщения: 3339
- ОС: Slackware 12.2, ArchLinux 64
Re: Случайное число
Сяшные генераторы случайных чисел -- это именно такие функции, как Ваша. Берется одно число (seed -- семя), называется X_0 и вычисляются числа вида
X_{n+1} = (a * X_n + b) mod m,
где a, b и m -- какие-то фиксиолванные константы. Грубо говоря, ничего случайного в этой последовательности нет, но распределение величин близко к равномерному.
Если нужны действительно случайные числа, их можно получить из девайса /dev/random, который коллекционирует шум от работы драйверов. Это -- как шар из корзины. Но в нем чисел не бесконечно много, поэтому иногда приходится ждать, пока из него можно прочитать.
На случай, если ждать нельзя, есть /dev/urandom, в котором чисел "столько, сколько надо", то есть, они не совсем случайные, а вычислены из слуяайных чисел по неким алгоритмам.
X_{n+1} = (a * X_n + b) mod m,
где a, b и m -- какие-то фиксиолванные константы. Грубо говоря, ничего случайного в этой последовательности нет, но распределение величин близко к равномерному.
Если нужны действительно случайные числа, их можно получить из девайса /dev/random, который коллекционирует шум от работы драйверов. Это -- как шар из корзины. Но в нем чисел не бесконечно много, поэтому иногда приходится ждать, пока из него можно прочитать.
На случай, если ждать нельзя, есть /dev/urandom, в котором чисел "столько, сколько надо", то есть, они не совсем случайные, а вычислены из слуяайных чисел по неким алгоритмам.