As of PHP 8.3, there is a built-in method for this, [`Random\Randomizer::nextFloat`](https://www.php.net/manual/en/random-randomizer.nextfloat.php).
```
$randomizer = new \Random\Randomizer();
$value = $randomizer->nextFloat();
```
The `Randomizer` is an object so that you can initialize it with different "engines". By default, it uses a cryptographically secure source of true randomness; but if you want _reproducible_ results, based on some seed, you can use one of the other classes in the `Random\Engine` namespace.
There is also a [`Random\Randomizer::getFloat`](https://www.php.net/manual/en/random-randomizer.getfloat.php) method to get values in any interval, without needing to perform multiplications which might bias the results.
```
$randomizer = new \Random\Randomizer();
$randomizer->getFloat(1.5, 23.5);
```
By default, the value returned is greater than or equal to the minimum, and strictly less than the maximum, referred to as `IntervalBoundary::ClosedOpen`. You can choose any combination of "closed" and "open" that suits your needs (see the manual page for some examples).
As of PHP 8.3, there is a built-in method for this, [`Random\Randomizer::getFloat`](https://www.php.net/manual/en/random-randomizer.getfloat.php).
The simplest usage looks like this:
```
$randomizer = new \Random\Randomizer();
$randomizer->getFloat(1, $maxTemp/2);
```
There are then two things you can tweak to your needs:
* By default, the value returned is greater than or equal to the minimum, and strictly less than the maximum, referred to as `IntervalBoundary::ClosedOpen`. You can choose any combination of "closed" and "open" that suits your needs (see the manual page for some examples).
* The `Randomizer` is an object so that you can initialize it with different "engines". By default, it uses a cryptographically secure source of true randomness; but if you want _reproducible_ results, based on some seed, you can use one of the other classes in the `Random\Engine` namespace.