генерация случайного числа в определенных пределах

MZ78

Новичок
генерация случайного числа в определенных пределах

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

PHP:
function slсрislovpredele($str,$x, $y , $modificatorunikalnosti)
{
//преобразуем строку $str в число $chislo
for ($i=0; $i<strlen($str); $i++) {
@$chislo.=ord(substr($str, $i, 1));
}

//здесь нужно сделать , чтобы $chislo было не меньше  $x и не больше $y 
//при этом изменено с помощью $modificatorunikalnosti
//при этом нужно исключить зацикливание скрипта

return ($rezultat);
}
И самое главное , в результате выполнения:
PHP:
$r1=slсрislovpredele("xxx",$x, $y , 1);
$r2=slсрislovpredele("xxx",$x, $y , 1);
$r3=slсрislovpredele("xxx",$x, $y , 2);
$r4=slсрislovpredele("yyy",$x, $y , 1);
в идеале при достаточно большом интервале между $x и $y должно получиться , что $r1 больше $x и меньше $y и равно $r2 и не равно $r3 и не равно $r4 т.е. вариант с rund() не подходит
Функция должна возвращать один и тот же результат при одинаковых входных параметрах.
 

Bitterman

Новичок
Функция должна возвращать один и тот же результат при одинаковых входных параметрах.
При таких условиях о случайном числе речь не может идти. Не до конца понятны входные условия. Есть ли какие-нить ограничения на входную строку? Есть ли ограничения на модификатор уникальности? Что должно быть на выходе, целое число или нет? Зачем это вообще нужно?
В общем случае, то есть при отсутствии ограничений, задача, ИМХО, решения не имеет, по крайней мере, так сразу я их не вижу. Можно попробовать брать 1/x и прибавлять полученное число к нижнему пределу интервала, но это только при условии ограниченности модификатора уникальности и при условии, что интервал всегда >=1.
 

ustas

Элекомист №1
rand(min, max);
При вызове без параметров min и max, возвращает псевдослучайное целое в диапазоне от 0 до RAND_MAX. Например, если вам нужно случайное число между 5 и 15 (включительно), вызовите rand (5, 15).
 

Bitterman

Новичок
Андрейка
ustas
Тредстартер написал, что при одинаковых входных параметрах, он должен получать одинаковый результат на выходе. str_shuffle и rand такого не обеспечивают, насколько я знаю.
 

Фанат

oncle terrible
Команда форума
Bitterman
а ты почитай документацию на функции, которые тут используются.
глядишь, узнаешь что-нибудь ещё
 

Bitterman

Новичок
Фанат
Да, согласен, если использовать srand при каждом вызове функции, то при одинаковых входных значениях будет одинаковый результат. Тут я стормозил. Но будет ли выполняться обратное условие, что для разных входных параметров результат не должен повторяться? Использование округления, по-моему, однозначно говорит, что нет, насчет уникальности str_shuffle не уверен.
 

MZ78

Новичок
Автор оригинала: Bitterman
Фанат
Да, согласен, если использовать srand при каждом вызове функции, то при одинаковых входных значениях будет одинаковый результат. Тут я стормозил. Но будет ли выполняться обратное условие, что для разных входных параметров результат не должен повторяться? Использование округления, по-моему, однозначно говорит, что нет, насчет уникальности str_shuffle не уверен.
Даже если грубо разсуждать, то если разница между $min и $max меньше количества выполнения функции с разными входными параметрами , то естественно 100% повторы будут в любой даже самой идеальной функции .
Если подключить теорию вероятности, то практически стопроцентность повторов будет и при намного большем интервале между $min и $max

-~{}~ 07.05.07 13:19:

Интересно как лучше проверить , на сколько равномерно между $min и $max будет распределен результат выполнения функции при максимально возможном большом количестве выполнения функции с разными входными параметрами.
 

Bitterman

Новичок
MZ78
Вопрос не в том какова вероятность совпадения, а в том, что она есть. Если тебя устраивает то, что при различных входных параметрах ты получишь один и тот же результат (другими словами, если твой скрипт при этом отработает нормально), то конечно выдумывать велосипед не стоит. Тут еще очень много зависит от того, что у тебя на входе. Например, такой код
Код:
	string_shuffle('abc', 10);
	string_shuffle('acb', 20);
	string_shuffle('bca', 30);
	string_shuffle('bac', 40);
	string_shuffle('cab', 50);
	string_shuffle('cba', 60);


	function string_shuffle($str, $mod)
	{
		srand($mod);
		echo(str_shuffle($str) . '<br />');
	}
стабильно дает мне 2-3 совпадения из 6 при различных значениях параметра mod.

Интересно как лучше проверить , на сколько равномерно между $min и $max будет распределен результат выполнения функции при максимально возможном большом количестве выполнения функции с разными входными параметрами.
Написать соответствующий скрипт
 

MZ78

Новичок
Автор оригинала: Bitterman
стабильно дает мне 2-3 совпадения из 6 при различных значениях параметра mod.
Я бы удивился если бы не было совпадений, а здесь все о.к.
Сори, но ты наверное прогуливал занятия в институте, когда изучали теорию вероятности?
 

Bitterman

Новичок
Ты читать умеешь? Я нигде не сказал, что совпадений быть не должно.
в идеале при достаточно большом интервале между $x и $y должно получиться , что $r1 больше $x и меньше $y и равно $r2 и не равно $r3 и не равно $r4
Это твои слова? Ты сам поставил условие, что в идеале при различных входных параметрах на выходе должен быть различный результат, а затем сразу же ухватился за вариант, где это, в общем случае, не выполняется. Когда же я тебе сказал об этом и спросил не нарушит ли это работу твоего скрипта, ты, вместо того, чтобы просто сказать "да, мой скрипт отработает нормально, меня такой вариант устраивает" начинаешь рассказывать мне что-то про теорию вероятностей. Иногда лучше жевать, чем говорить. :(
 
Сверху