(PHP 8 >= 8.3.0)
Random\Randomizer::nextFloat โ ๅ้ๅบ้ [0.0, 1.0) ใใใfloat ใฎๅคใๅๅพใใ
ๅ้ๅบ้(ๅทฆ้ๅณ้) ใซไธๆงใซๅๆฃใใ float ใ็ญ็ขบ็ใซ่ฟใใพใใ
ๅบ้ใซใฏ 0.0
ใๅซใฟใ1.0
ใพใงใงใใใ
1.0
ใใฎใใฎใฏๅซใฟใพใใใ
่ฟใใใ float ใฎๅคใใๆๅฎใใใๅณ้ใฎ้จๅๅบ้ใซใใ็ขบ็ใฏใ
้จๅๅบ้ใฎๅคงใใใซๆฏไพใใพใใ
ใคใพใใ่ฟใใใ float ใ 0.5
ใใๅฐใใ
็ขบ็ใฏ50%ใจใใใใจใงใใใใใฏ float ใ ๅฐใชใใจใ
0.5
ไปฅไธใงใใ็ขบ็ใจ็ญใใใชใใพใใ
ๅๆงใซใ่ฟใใใ float ใใๅบ้ 0.2
ใใ
0.25
ๆชๆบใพใงใซๅใพใ็ขบ็ใฏใใกใใใฉ 5% ใซใชใใพใใ
ใใฎๆง่ณชใไฝฟใใจใRandom\Randomizer::nextFloat() ใๆดป็จใใฆ่ฟใใใ float ใๆๅฎใใใ็ขบ็ ใใๅฐใใ ใใจใใใงใใฏใใใใจใงใ ๆๅฎใใใ็ขบ็ใงใฉใณใใ ใช boolean ๅคใ็ๆใใใใจใๅฏ่ฝใซใชใใพใใ
ๆณจๆ:
Random\Randomizer::nextFloat() ใ่ฟใๅฏ่ฝๆงใใใ float ใฎๅคใฎ็ฏๅฒใฏใ
Randomizer::getFloat(0.0, 1.0, IntervalBoundary::ClosedOpen)
ใจๅใใงใใใงใใใๅ ้จ็ใช Random\Randomizer::nextFloat() ใฎๅฎ่ฃ ใฏใใๅน็็ใงใใ
ไน็ฎใๅ ็ฎ(ใใใใใขใใฃใณๅคๆ)ใไฝฟใฃใฆใ ใใฎ้ขๆฐใฎๆปใๅคใ็ฐใชใๅบ้ใซๆกๅคง/็ธฎๅฐใใใจใ ็ตๆใฎๅคใซๅใใๅบใใใใใใพใใใ ใชใใชใใๆตฎๅๅฐๆฐ็นๆฐใฏๆฐ็ด็ทไธใงๅไธใซๅๅธใใใใใงใฏใชใใใใงใใ ๅ จใฆใฎๅคใๆตฎๅๅฐๆฐ็นๆฐใซใใฃใฆๆญฃ็ขบใซ่กจ็พใงใใใจใฏ้ใใชใใฎใงใ ใขใใฃใณๅคๆใฎ็ตๆใๆ้ปใฎไธธใๅฆ็ใซใใฃใฆๆฑใใๅบ้ใใๅคใใๅคใซใชใฃใฆใใพใๅฏ่ฝๆงใใใใพใใ ใขใใฃใณๅคๆใฎ็ตๆ็ใใๅ้กใฎ ่ฉณ็ดฐใช่ชฌๆ ใฏใRandom\Randomizer::getFloat() ใฎใใญใฅใกใณใใซ่ชฌๆใใใใพใใ
ไปปๆใฎๅบ้ๅ ใงใฉใณใใ ใช float ใฎๅคใ็ๆใใใซใฏใ Random\Randomizer::getFloat() ใไฝฟใใพใใไปปๆใฎๅบ้ๅ ใงใฉใณใใ ใชๆดๆฐใ็ๆใใใซใฏใ Random\Randomizer::getInt() ใไฝฟใใพใใ
ใใฎ้ขๆฐใซใฏใใฉใกใผใฟใฏใใใพใใใ
ๅ้ๅบ้ [0.0, 1.0) (IntervalBoundary::ClosedOpen
)
ใซไธๆงใซๅๆฃใใ float ใ็ญ็ขบ็ใซ่ฟใใพใใ
่ฟใใใๅคใซใฏ 0.0
ใๅซใฟใพใใใ
1.0
ใฏๅซใฟใพใใใ
Random\Randomizer::$engine
ใซๅญๅจใใ
Random\Engine::generate() ใกใฝใใ
ใในใญใผใใใใใใใ Throwable ใในใญใผใใใพใใ
ไพ1 Random\Randomizer::nextFloat() ใฎไพ
<?php
$r = new \Random\Randomizer();
// ่ฟใใใ bool ๅคใฏใๆๅฎใใใ็ขบ็ใง true ใซใชใใพใ
$chance = 0.5;
$bool = $r->nextFloat() < $chance;
echo ($bool ? "You won" : "You lost"), "\n";
?>
ไธใฎไพใฎๅบๅใฏใ ใใจใใฐไปฅไธใฎใใใซใชใใพใใ
You won
ไพ2 ใขใใฃใณๅคๆใไฝฟใฃใ้้ใฃใๆกๅคงๆผ็ฎ
<?php
final class MaxEngine implements Random\Engine {
public function generate(): string {
return "\xff";
}
}
$randomizer = new \Random\Randomizer(new MaxEngine);
$min = 3.5;
$max = 4.5;
// ไปฅไธใฏ็ตถๅฏพใใใชใใง๏ผ:
//
// ไปฅไธใฎใณใผใใฏ nextFloat() ใ 1ใ็ตถๅฏพใซๅซใพใชใๅ้ๅบ้ใใใตใณใใชใณใฐใใใซ
// ใ้ขใใใใ4.5 ใๅบๅใใพใใ
printf("Wrong scaling: %.17g", $randomizer->nextFloat() * ($max - $min) + $min);
// ๆญฃใใใฏใไปฅไธใฎใใใซใใพใ:
// $randomizer->getFloat($min, $max, \Random\IntervalBoundary::ClosedOpen);
?>
ไธใฎไพใฎๅบๅใฏไปฅไธใจใชใใพใใ
Wrong scaling: 4.5