У меня есть следующий код в PHP, который работает нормально (возвращает более или менее 10 результатов при каждом запуске):
<code>function GetAboutTenRandomNumbers()
{
$result = array();
for ($i = 0; $i < 240; $i++)
{
if (Chance(10, 240) === true)
{
$result[] = $i;
}
}
echo '<pre>';
print_r($result);
echo '
';
вернуть $ результат;
}
А функция Chance () работает следующим образом:
function Chance($chance, $universe = 100)
{
$chance = abs(intval($chance));
$universe = abs(intval($universe));
if (mt_rand(1, $universe) <= $chance)
{
return true;
}
return false;
}
Теперь я хочу случайным образом разделить эти 10 (в среднем) результатов на 4 следующих сегмента:
- первый имеет вероятность 10% * 10 = 1
- второй с вероятностью 20% * 10 = 2
- третий с вероятностью 30% * 10 = 3
- четвертый с вероятностью 40% * 10 = 4
Как видите, сумма всех сегментов (1 + 2 + 3 + 4) равна 10, поэтому для этого я написал следующую функцию:
<code>function GetAboutTenWeightedRandomNumbers()
{
$result = array();
// Chance * 10%
for ($i = 0; $i < 60; $i++)
{
if (Chance(10 * 0.1, 240) === true)
{
$result[] = $i;
}
}
// Chance * 20%
for ($i = 60; $i < 120; $i++)
{
if (Chance(10 * 0.2, 240) === true)
{
$result[] = $i;
}
}
// Chance * 30%
for ($i = 120; $i < 180; $i++)
{
if (Chance(10 * 0.3, 240) === true)
{
$result[] = $i;
}
}
// Chance * 40%
for ($i = 180; $i < 240; $i++)
{
if (Chance(10 * 0.4, 240) === true)
{
$result[] = $i;
}
}
echo '<pre>';
print_r($result);
echo '
';
вернуть $ результат;
}
Проблема в том, что я запускал функцию GetAboutTenWeightedRandomNumbers десятки раз, и результат намного ниже, чем результат, возвращаемый функцией GetAboutTenRandomNumbers. Я уверен, что совершаю фундаментальную математическую ошибку, подозреваю, где, но я не знаю, как ее исправить.