Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Разное

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как работает функция "rand"
 
 автор: forma   (02.09.2006 в 22:47)   письмо автору
 
 

Как работает функция "rand", или любая другая функция выводящая случайное число?

Я не понимаю как можно заставить компьютер выбирать с потолка число.
Можете привести пример?
Типа такого:
function my_rand()
{
$num=(число с потолка);
return $num;
}

   
 
 автор: DEM   (02.09.2006 в 22:58)   письмо автору
 
   для: forma   (02.09.2006 в 22:47)
 

rand(1,10);

Эта функция выводит число от одного до 10 (включительно), если хотите обсолютно с оптолка то ставьте с 0 до 10000, я думаю повторятся не будет )))


ЗЫ. лучше такие вопросы задавать в форуме по РНР, а не в РАЗНОЕ ;)

   
 
 автор: forma   (02.09.2006 в 23:04)   письмо автору
 
   для: DEM   (02.09.2006 в 22:58)
 

вроде кто то вопрос не понял.
давайте так: как сделать свою функцию, точно такую же как rand, только не используя этой функции(rand), или другой функции которая выводит случайное число.

   
 
 автор: DEM   (02.09.2006 в 23:05)   письмо автору
 
   для: forma   (02.09.2006 в 23:04)
 

А зачем? Я конечно понимаю что бывают разные слуачи, но зачем изобретать вилосипед? Скорее всгео можно как нить сделать при помощи какого нить for, или что-то типа того, но как, я незнаю (((

   
 
 автор: forma   (02.09.2006 в 23:17)   письмо автору
 
   для: DEM   (02.09.2006 в 23:05)
 

Мне интересно.
А с форами скарей не получиться.

   
 
 автор: Unkind™   (03.09.2006 в 03:10)   письмо автору
 
   для: forma   (02.09.2006 в 23:17)
 

Можно так:


<?php

// int random( int length )

function random($length)
{
//$length - длина числа, которое будет сгенерировано случ. образом

//Массив цифр
$figures = array(0123456789);

$number "";

for(
$i 0$i $length$i++)
{
$rnd array_rand($figures);
$number .= $rnd;
}

//Возвращаем целое число
return (int) $number;
}
?>


Хотя используется функция array_rand()...

   
 
 автор: cheops   (02.09.2006 в 23:06)   письмо автору
 
   для: forma   (02.09.2006 в 22:47)
 

<?php
function my_rand()
{
$num=rand();
return 
$num;
}
?>

Каждая операционная система решает задачу по своему... кто-то привязывается к движениям мыши и набору клавиш, кто ко времени, в былые времена генератор случайных чисел был основан на выборе точки в падении напряжении триггера или что-то в этом духе - сейчас существуют относительно равномерные алгоритмы.

   
 
 автор: DEM   (02.09.2006 в 23:08)   письмо автору
 
   для: cheops   (02.09.2006 в 23:06)
 

АГА! Но человек просил без использования функции rand() :), а у вас она юзается

   
 
 автор: Loki   (02.09.2006 в 23:27)   письмо автору
 
   для: DEM   (02.09.2006 в 23:08)
 

Ну можно например брать текущее время, возводить его в квадрат и потом брать каждую вторую цифру из результата:)

   
 
 автор: DEM   (02.09.2006 в 23:29)   письмо автору
 
   для: Loki   (02.09.2006 в 23:27)
 

Ага, или шифровать при помощи md5();, и брать первую цифру (ну или все)...

   
 
 автор: Artem S.   (03.09.2006 в 00:01)   письмо автору
 
   для: DEM   (02.09.2006 в 23:29)
 

В старом учебники по с++ есть на эту тему статейка как раз. Там я помню что говориться что все "случайные чила" - пвсевдо случайные. Берется последовательность - формула, по ней и вычисляется одно число за другим. Проблема лишь в выборе 1го чила. Если есть желание могу выложить код на cpp

   
 
 автор: Loki   (03.09.2006 в 00:11)   письмо автору
 
   для: Artem S.   (03.09.2006 в 00:01)
 

Так и есть: машина тем и отличается от человека, что при идентичных входных условиях, результать всегда будет одинаков.

   
 
 автор: forma   (03.09.2006 в 08:26)   письмо автору
 
   для: Loki   (02.09.2006 в 23:27)
 

Можно, но только с очень точным временем, а я такой функции не знаю(которая возвращает точное время), а если не совсем точное, то если дважды кинуть случайное число(твоим способом) в одном скрипте, то выпадет то же число.

   
 
 автор: Loki   (03.09.2006 в 19:52)   письмо автору
 
   для: forma   (03.09.2006 в 08:26)
 

>а я такой функции не знаю
Я знаю. Спрашивайте если что:)
http://www.softtime.ru/dic/id_dic=200&id_group=7

   
 
 автор: cheops   (03.09.2006 в 12:29)   письмо автору
 
   для: Loki   (02.09.2006 в 23:27)
 

>Ну можно например брать текущее время, возводить его в квадрат и потом брать каждую
>вторую цифру из результата:)
Не для каждой задачи так можно поступать... дело в том, что генератор случайных чисел должен быть по возможности равномерным - т.е. все числа должны выпадать примерно одинаковое число раз... В казино и спорт-лотах это вообще проблема - поэтому там рулетки регулярно меняют, чтобы неравномерность не была вычислена.

   
 
 автор: Loki   (03.09.2006 в 19:55)   письмо автору
 
   для: cheops   (03.09.2006 в 12:29)
 

>должен быть по возможности равномерным
Если брать часть справа от запятой, то будет относительно равномерно, как мне кажется.

   
 
 автор: Axxil   (06.09.2006 в 09:23)   письмо автору
 
   для: cheops   (03.09.2006 в 12:29)
 

В казино генератором случайных чисел является крупье.
И менять впервую очередь надо его :)
А колёса рулеток щас научились практически идеально регулировать, да и прошли времена когда чувак мог месяцами просто наблюдать за рулеткой. Щас таких махом вычисляют и предлагают воздержаться от посещений.

   
 
 автор: cheops   (06.09.2006 в 11:29)   письмо автору
 
   для: Axxil   (06.09.2006 в 09:23)
 

Скорее всего, мне эти байки математики про 60-70-е года рассказывали, когда я с методом Монте-Карло работал и искал равномерный генератор псевдослучайных чисел.

   
 
 автор: cheops   (03.09.2006 в 12:26)   письмо автору
 
   для: DEM   (02.09.2006 в 23:08)
 

>АГА! Но человек просил без использования функции rand() :), а у вас она юзается
Можно порыться, где-то у меня были достаточно равномерные генераторы, только на фортране...

   
 
 автор: Shorr Kan   (03.09.2006 в 14:17)   письмо автору
 
   для: 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;
?>


Не знаю, может это не то, но... Работает.

   
 
 автор: cheops   (03.09.2006 в 15:15)   письмо автору
 
   для: Shorr Kan   (03.09.2006 в 14:17)
 

shuffle() он тоже на rand() основан... мат.аглоритмы в основном ориентируются на ошибки точности машинного вычисления.

   
 
 автор: forma   (03.09.2006 в 18:45)   письмо автору
 
   для: forma   (02.09.2006 в 22:47)
 

Кто то знает функцию возвращающую точное время аж до 0.000000 сек.?

   
 
 автор: cheops   (03.09.2006 в 20:54)   письмо автору
 
   для: forma   (03.09.2006 в 18:45)
 

microtime(), правда операционная система должна поддерживать такую точность.

   
 
 автор: forma   (05.09.2006 в 18:44)   письмо автору
 
   для: cheops   (03.09.2006 в 20:54)
 

угу, спасибо.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования