Hallo,
Ich bin am überlegen sowie auf der Suche nach einer Pseudo-Zufalls-Funktion, die für große Zahlen gedacht ist. Dabei soll man den Range-Wert einstellen können, wie bei (mt_)rand. Die bisherigen Funktionen, die ich gefunden habe, sind ein wenig zu sehr abweichend von der Verteilung der Zahlen in Bezug auf (mt_)rand.
Desweiteren such ich nach einer einfachereren Lösung für folgendes Szenario bzgl. Eintrittswahrscheinlichkeit bei unterschiedlichen Werten. Der Value-Parameter definiert hier die Chance des Eintretens, des jeweiligen Datensatzes.
Ich bin am überlegen sowie auf der Suche nach einer Pseudo-Zufalls-Funktion, die für große Zahlen gedacht ist. Dabei soll man den Range-Wert einstellen können, wie bei (mt_)rand. Die bisherigen Funktionen, die ich gefunden habe, sind ein wenig zu sehr abweichend von der Verteilung der Zahlen in Bezug auf (mt_)rand.
Desweiteren such ich nach einer einfachereren Lösung für folgendes Szenario bzgl. Eintrittswahrscheinlichkeit bei unterschiedlichen Werten. Der Value-Parameter definiert hier die Chance des Eintretens, des jeweiligen Datensatzes.
PHP-Code:
$users = array(
'A' => '100',
'B' => '2000',
'C' => '30000',
'D' => '400000',
'E' => '5000000',
);
$maximum = array_sum_bignum($users);
$number = mt_rand_bignum('1', $maximum);
$users = shuffle_keep_keys($users);
$count = '0';
foreach($users AS $name => $value)
{
$min = bcadd($count, '1');
$count = bcadd($count, $value);
$max = $count;
if(($min <= $number) AND ($max >= $number))
{
//echo $min . '' . $max . '' . $value;
break;
}
}
Kommentar