PHP Conference Nagoya 2025

Random\Randomizer::nextFloat

(PHP 8 >= 8.3.0)

Random\Randomizer::nextFloatRenvoie un flottant sélectionné de l'interval ouvert à droite [0.0, 1.0)

Description

public Random\Randomizer::nextFloat(): float

Renvoie un flottant sélectionné de manière uniforme et équidistribué de l'interval ouvert à droite de 0.0 jusqu'à, mais sans inclure, 1.0.

La chance pour un flottant retourné d'être dans un sous-intervalle donné ouvert à droite est proportionnelle à la taille du sous-intervalle. Cela signifie que la chance pour un flottant d'être inférieur à 0.5 est de 50 %, ce qui est égal à la chance pour un flottant d'être au moins 0.5. De même la chance pour un flottant d'être dans l'interval ouvert à droite de 0.2 jusqu'à, mais sans inclure, 0.25 est exactement de 5 %.

Cette propriété permet de facilement utiliser Random\Randomizer::nextFloat() pour générer un booléen aléatoire avec une chance donnée en vérifiant si le flottant retourné est inférieur à une chance donnée.

Note:

Le domaine des flottants retournés par Random\Randomizer::nextFloat() est identique à celui de Randomizer::getFloat(0.0, 1.0, IntervalBoundary::ClosedOpen).

L'implémentation interne de Random\Randomizer::nextFloat() est plus efficace.

Attention

Mettre à l'échelle la valeur retournée à un intervalle différent en utilisant la multiplication ou l'addition (une transformation affine) pourrait résulter en un biais dans la valeur résultante car les flottants ne sont pas également denses à travers la ligne des nombres. Comme toutes les valeurs ne peuvent pas être exactement représentées par un flottant, le résultat de la transformation affine pourrait également résulter en des valeurs en dehors de l'intervalle demandé en raison d'arrondis implicites. Une explication détaillée des problèmes avec la transformation affine est donnée dans la documentation pour Random\Randomizer::getFloat().

Utiliser Random\Randomizer::getFloat() pour générer un flottant aléatoire dans un intervalle arbitraire. Utiliser Random\Randomizer::getInt() pour générer un entier aléatoire dans un intervalle arbitraire.

Liste de paramètres

Cette fonction ne contient aucun paramètre.

Valeurs de retour

Un flottant sélectionné de manière uniforme dans l'interval ouvert à droite (IntervalBoundary::ClosedOpen) [0.0, 1.0). 0.0 est une valeur de retour possible, 1.0 ne l'est pas.

Erreurs / Exceptions

Exemples

Exemple #1 Exemple de Random\Randomizer::nextFloat()

<?php
$r
= new \Random\Randomizer();

// Le résultat du booléen sera vrai avec la chance donnée.
$chance = 0.5;

$bool = $r->nextFloat() < $chance;

echo (
$bool ? "You won" : "You lost"), "\n";
?>

Résultat de l'exemple ci-dessus est similaire à :

You won

Exemple #2 Mise à l'échelle incorrecte en utilisant une transformation affine

<?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;

// NE PAS FAIRE CECI:
//
// Cela affichera 4.5, malgré le fait que nextFloat() échantillonne
// à partir d'un intervalle ouvert à droite, qui ne retournera jamais 1.
printf("Wrong scaling: %.17g", $randomizer->nextFloat() * ($max - $min) + $min);

// Correct:
// $randomizer->getFloat($min, $max, \Random\IntervalBoundary::ClosedOpen);
?>

L'exemple ci-dessus va afficher :

Wrong scaling: 4.5

Voir aussi

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top