|
|
|
| Как работает функция "rand", или любая другая функция выводящая случайное число?
Я не понимаю как можно заставить компьютер выбирать с потолка число.
Можете привести пример?
Типа такого:
function my_rand()
{
$num=(число с потолка);
return $num;
} | |
|
|
|
|
|
|
|
для: forma
(02.09.2006 в 22:47)
| | rand(1,10);
Эта функция выводит число от одного до 10 (включительно), если хотите обсолютно с оптолка то ставьте с 0 до 10000, я думаю повторятся не будет )))
ЗЫ. лучше такие вопросы задавать в форуме по РНР, а не в РАЗНОЕ ;) | |
|
|
|
|
|
|
|
для: DEM
(02.09.2006 в 22:58)
| | вроде кто то вопрос не понял.
давайте так: как сделать свою функцию, точно такую же как rand, только не используя этой функции(rand), или другой функции которая выводит случайное число. | |
|
|
|
|
|
|
|
для: forma
(02.09.2006 в 23:04)
| | А зачем? Я конечно понимаю что бывают разные слуачи, но зачем изобретать вилосипед? Скорее всгео можно как нить сделать при помощи какого нить for, или что-то типа того, но как, я незнаю ((( | |
|
|
|
|
|
|
|
для: DEM
(02.09.2006 в 23:05)
| | Мне интересно.
А с форами скарей не получиться. | |
|
|
|
|
|
|
|
для: forma
(02.09.2006 в 23:17)
| | Можно так:
<?php
// int random( int length )
function random($length)
{
//$length - длина числа, которое будет сгенерировано случ. образом
//Массив цифр
$figures = array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
$number = "";
for($i = 0; $i < $length; $i++)
{
$rnd = array_rand($figures);
$number .= $rnd;
}
//Возвращаем целое число
return (int) $number;
}
?>
|
Хотя используется функция array_rand()... | |
|
|
|
|
|
|
|
для: forma
(02.09.2006 в 22:47)
| |
<?php
function my_rand()
{
$num=rand();
return $num;
}
?>
|
Каждая операционная система решает задачу по своему... кто-то привязывается к движениям мыши и набору клавиш, кто ко времени, в былые времена генератор случайных чисел был основан на выборе точки в падении напряжении триггера или что-то в этом духе - сейчас существуют относительно равномерные алгоритмы. | |
|
|
|
|
|
|
|
для: cheops
(02.09.2006 в 23:06)
| | АГА! Но человек просил без использования функции rand() :), а у вас она юзается | |
|
|
|
|
|
|
|
для: DEM
(02.09.2006 в 23:08)
| | Ну можно например брать текущее время, возводить его в квадрат и потом брать каждую вторую цифру из результата:) | |
|
|
|
|
|
|
|
для: Loki
(02.09.2006 в 23:27)
| | Ага, или шифровать при помощи md5();, и брать первую цифру (ну или все)... | |
|
|
|
|
|
|
|
для: DEM
(02.09.2006 в 23:29)
| | В старом учебники по с++ есть на эту тему статейка как раз. Там я помню что говориться что все "случайные чила" - пвсевдо случайные. Берется последовательность - формула, по ней и вычисляется одно число за другим. Проблема лишь в выборе 1го чила. Если есть желание могу выложить код на cpp | |
|
|
|
|
|
|
|
для: Artem S.
(03.09.2006 в 00:01)
| | Так и есть: машина тем и отличается от человека, что при идентичных входных условиях, результать всегда будет одинаков. | |
|
|
|
|
|
|
|
для: Loki
(02.09.2006 в 23:27)
| | Можно, но только с очень точным временем, а я такой функции не знаю(которая возвращает точное время), а если не совсем точное, то если дважды кинуть случайное число(твоим способом) в одном скрипте, то выпадет то же число. | |
|
|
|
|
|
|
|
для: forma
(03.09.2006 в 08:26)
| | >а я такой функции не знаю
Я знаю. Спрашивайте если что:)
http://www.softtime.ru/dic/id_dic=200&id_group=7 | |
|
|
|
|
|
|
|
для: Loki
(02.09.2006 в 23:27)
| | >Ну можно например брать текущее время, возводить его в квадрат и потом брать каждую
>вторую цифру из результата:)
Не для каждой задачи так можно поступать... дело в том, что генератор случайных чисел должен быть по возможности равномерным - т.е. все числа должны выпадать примерно одинаковое число раз... В казино и спорт-лотах это вообще проблема - поэтому там рулетки регулярно меняют, чтобы неравномерность не была вычислена. | |
|
|
|
|
|
|
|
для: cheops
(03.09.2006 в 12:29)
| | >должен быть по возможности равномерным
Если брать часть справа от запятой, то будет относительно равномерно, как мне кажется. | |
|
|
|
|
|
|
|
для: cheops
(03.09.2006 в 12:29)
| | В казино генератором случайных чисел является крупье.
И менять впервую очередь надо его :)
А колёса рулеток щас научились практически идеально регулировать, да и прошли времена когда чувак мог месяцами просто наблюдать за рулеткой. Щас таких махом вычисляют и предлагают воздержаться от посещений. | |
|
|
|
|
|
|
|
для: Axxil
(06.09.2006 в 09:23)
| | Скорее всего, мне эти байки математики про 60-70-е года рассказывали, когда я с методом Монте-Карло работал и искал равномерный генератор псевдослучайных чисел. | |
|
|
|
|
|
|
|
для: DEM
(02.09.2006 в 23:08)
| | >АГА! Но человек просил без использования функции rand() :), а у вас она юзается
Можно порыться, где-то у меня были достаточно равномерные генераторы, только на фортране... | |
|
|
|
|
|
|
|
для: cheops
(03.09.2006 в 12:26)
| |
<?
for($i=0;$i<=9;$i++){$num[]=$i;}
shuffle($num);$x=$num[0];shuffle($num);
$n='';for($i=0;$i<=$x;$i++){$n.=$num[$i];}
print $n;
?>
|
Не знаю, может это не то, но... Работает. | |
|
|
|
|
|
|
|
для: Shorr Kan
(03.09.2006 в 14:17)
| | shuffle() он тоже на rand() основан... мат.аглоритмы в основном ориентируются на ошибки точности машинного вычисления. | |
|
|
|
|
|
|
|
для: forma
(02.09.2006 в 22:47)
| | Кто то знает функцию возвращающую точное время аж до 0.000000 сек.? | |
|
|
|
|
|
|
|
для: forma
(03.09.2006 в 18:45)
| | microtime(), правда операционная система должна поддерживать такую точность. | |
|
|
|
|
|
|
|
для: cheops
(03.09.2006 в 20:54)
| | угу, спасибо. | |
|
|
|