私は正常に動作PHPで、次のコード(多かれ少なかれ10件の結果にそれが実行されるたびに返されます)しました:分割確率
function GetAboutTenRandomNumbers()
{
$result = array();
for ($i = 0; $i < 240; $i++)
{
if (Chance(10, 240) === true)
{
$result[] = $i;
}
}
echo '<pre>';
print_r($result);
echo '</pre>';
return $result;
}
をし、次のようにチャンス()関数が行く:
function Chance($chance, $universe = 100)
{
$chance = abs(intval($chance));
$universe = abs(intval($universe));
if (mt_rand(1, $universe) <= $chance)
{
return true;
}
return false;
}
は今、私はランダムに4次のセグメント中のもの10(平均)の結果を分割する:
- の確率を有する第1 10%* 10 = 1
- 20%の確率を有する第1 * 10 = 2
- 30%の確率を有する第1 * 10 = 3
- 40%の確率を有する1/4 * 10 = 4
すべてのセグメント(1 + 2 + 3 + 4)の合計が10に等しいので、これを行うために次の関数をコーディングしました。
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 '</pre>';
return $result;
}
問題は、私はGetAboutTenWeightedRandomNumbersは何十回も機能し実行したとされ、結果はGetAboutTenRandomNumbers関数によって返された結果よりもはるかに低いです。私は基本的な数学のミスをしていると確信しています、私はそれがどのように解決するのか分からないと思う。
"DoIt"は非常にわかりやすい関数名ですか? – Svante
当時の私の心には何も良いことはありませんでした。 =) –
GetAboutTenRandomNumbers()とGetAboutTenWeightedRandomNumbers()はどうですか? – Eric