I have a code that initializes a dice object by the following code:
public function initializeDiceSides($totalSides, $fair, $maxProbability = 100) {
$maxTemp = $maxProbability;
$sides = array();
for ($side = 0; $side < $totalSides; $side++) {
//if we want fair dice just generate same probabilities for each side
if ($fair === true) {
$probability = number_format($maxProbability/$totalSides, 5);
} else {
//set probability to random number between 1 and half of $maxTemp
$probability = number_format(mt_rand(1, $maxTemp/2), 5);
//subtract probability of current side from maxtemp
$maxTemp= $maxTemp- $probability;
$sides[$side] = $probability;
}
}
echo $total . '<br />';
print_r($sides);
}
above code prints:
89
Array ( [0] => 48.00000 [1] => 13.00000 [2] => 14.00000
[3] => 9.00000 [4] => 2.00000 [5] => 2.00000 )
I want to be able to generate float numbers instead of integers, I want to have something like
Array ( [0] => 48.051212 [1] => 13.661212 [2] => 14.00031
[3] => 9.156212 [4] => 2.061512 [5] => 2.00000 )
A simple approach would be to use lcg_value
and multiply with the range and add the min value
function random_float ($min,$max) {
return ($min + lcg_value()*(abs($max - $min)));
}
I'd just generate random numbers from 0 to 999999 and then divide them by 100000
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With