<?php
 function float_val_max($facteur = 2, $nb_iterations = 1)
 {
  $val_max = 1; $val_max_precedent = 0;
  // on calcule la plus grande puissance de 2 avant la valeur infinie (INF)    
  while((string)$val_max != 'INF') { $val_max_precedent = $val_max; $val_max *= $facteur; }
  // on répète le calcul du while() nb_iterations fois
  for($i = 0; $i < $nb_iterations; $i++)
  {
   $pas_val_max = $facteur/2;
   $val_max = $val_max_precedent;
   // on approche au plus près de la valeur avant INFini
   // en ajoutant les valeurs successives des puissances de 2
   while((string)$val_max != 'INF')
   {
    $val_max_precedent = $val_max;
    $val_max += $pas_val_max;
    $pas_val_max *= $facteur;
   }
  }
  return $val_max_precedent;
 }
 // appel de la fonction
 $reel=float_val_max(2,1);
 // affichage du résultat
 echo "float_val_max = ".$reel."\n";
 // affichage du type de la variable
 var_dump($reel);
 echo "Valeur supérieure 1.7977e308 : ";
 var_dump(1.7977e308);  
?>
