Форум сетевых администраторов
Показаны 15 сообщений на этой странице

Форум сетевых администраторов (http://netadmin.ws/forum/index.php)
- PHP (http://netadmin.ws/forum/forumdisplay.php?forumid=6)
-- генератор случайных чисел (http://netadmin.ws/forum/showthread.php?threadid=6516)


Помещено tosharu 13-09-2003 в 05:55:

генератор случайных чисел

Очень интересует как можно на php реализовать наиболее приближенный к истинно случайному генератор случайных чисел (X их X). Важно, чтобы выдавал результаты равномерно распределенные.
Стандартные методы не подходят, насколько слышал в них нет истинной случайности.

__________________
tosha


Помещено Silencer 13-09-2003 в 07:51:

rand плюс на time() поделить на айпи клиента умножить на другой rand. С пивом потянет

__________________
Типа спициялист по елехтронной комэрцыи. Крут не по децки.


Помещено tosharu 13-09-2003 в 08:17:

При чем тут умножить и поделить.

__________________
tosha


Помещено Silencer 13-09-2003 в 08:20:

Для пущей рандомности.

__________________
Типа спициялист по елехтронной комэрцыи. Крут не по децки.


Помещено tosharu 13-09-2003 в 08:40:

Так числа то нужны из определенного массива, к примеру 5 чисел от 1 до 20.
Если их умножать и делить массив, что получится...

__________________
tosha


Помещено Andrej 13-09-2003 в 16:40:

tosharu
А чем тебе для этого mt_rand () не подходит?

Создаёшь массив, заполняешь числами, потом выбираешь с помощью mt_rand ()...

__________________
f9ffe3323e79b2a558b92af5b4039e20


Помещено he][es 14-09-2003 в 09:39:

у меня такая же трабла, только мне нужно по id выбрать случ. запись из таблицы, а ведь там могут быть пробелы... типа 1,2,4,10 ...
$show->max_nom('miss')=SELECT COUNT(*) FROM miss_list;
mt_rand(1, $show->max_nom('miss'));

__________________
Админ - вождь Апачей...


Помещено polo 14-09-2003 в 13:32:

подсчитываешь колво в таблице ($total);
$num = mt_rand(0, ($total-1));
в SELECT используешь LIMIT $num,1

__________________
Всегда есть решение.


Помещено he][es 14-09-2003 в 19:13:

polo хм.. может не понял (я), но не проканает:
1, 100, 150, 151-200 => $total=52 (кажись)
=> $num = mt_rand(0, (52-1));
от 0 до 51 И? А циферки 100, 150-200???

__________________
Админ - вождь Апачей...


Помещено polo 14-09-2003 в 19:24:

Читай про LIMIT в доках по мускулю.

__________________
Всегда есть решение.


Помещено he][es 14-09-2003 в 20:22:

polo ну... и?.. мне легче не стало

quote:

Выражение LIMIT может использоваться для ограничения количества строк, возвращенных командой SELECT. LIMIT принимает один или два числовых аргумента. Ð_ти аргументы должны быть целочисленными константами. Если заданы два аргумента, то первый указывает на начало первой возвращаемой строки, а второй задает максимальное количество возвращаемых строк. При этом смещение начальной строки равно 0 (не 1):

mysql> SELECT * FROM table LIMIT 5,10; # возвращает строки 6-15

Если задан один аргумент, то он показывает максимальное количество возвращаемых строк:

mysql> SELECT * FROM table LIMIT 5; # возвращает первых 5 строк

Другими словами, LIMIT n эквивалентно LIMIT 0,n.


Получим строки с первой по последнюю... Всё равно что
SELECT * FROM table...
Или я торможу???

he][es добавил 14-09-2003 в 20:26:33:
Сижу думаю... или он тогда не по id а просто по порядку считать будет?
Если так то да... пойдёт...

he][es добавил 14-09-2003 в 20:37:55:
Ну вот! Уже много лучше! Пасиба за помощь!
А то 10 сл.чисел по моей корявой методике генерились почти 1 сек. на Atlon 2500+ & 256PC3200 & ATA133 винте
(даже MySQL подглючивал от такой облавы запросов)

__________________
Админ - вождь Апачей...


Помещено polo 14-09-2003 в 22:21:

Так и не понял разобрался ты или нет, но:
Принцип прост, подсчитывается кол-во записей в таблице, получается случайная запись в диапазоне от 0 до кол-во записей -1 (думаю понятно почему), выбирается запись с оффсетом полученным выше в кол-ве одна штука. Может есть и другой метод, но мне он к сожалению не известен.

__________________
Всегда есть решение.


Помещено he][es 14-09-2003 в 23:00:

polo если он будет выводить номер строки просто "по порядку" без учёта id то да, разобрался.
Пасибо БААААЛЬШОЕ!

__________________
Админ - вождь Апачей...


Помещено tosharu 18-09-2003 в 09:33:

quote:
Первоначальное сообщение от Andrej
tosharu
А чем тебе для этого mt_rand () не подходит?

Создаёшь массив, заполняешь числами, потом выбираешь с помощью mt_rand ()...




mt_srand(microtime() * 10000);

$RandomValue = mt_rand(1, 10);


Как и какие источники энтропии кроме времени можно сюда вмешать?
К примеру внутренний счетчик тактов процессора или другие..... ?

__________________
tosha


Помещено whisk 07-10-2003 в 20:35:

polo с какой-то mysql 3.23 можно ... ORDER BY RAND() LIMIT n -- n записей в случайном порядке. По идее, должно быть быстрее, чем вариант с двумя запросами..


Формат времени GMT. Текущее время 07:18.
Показаны 15 сообщений на этой странице

Powered by: vBulletin Version 2.2.4
Copyright © Jelsoft Enterprises Limited 2000, 2001.