<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/class.random-randomizer.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'es',
  ),
  'this' => 
  array (
    0 => 'random-randomizer.nextfloat.php',
    1 => 'Random\\Randomizer::nextFloat',
    2 => 'Devuelve un float seleccionado del intervalo abierto a la derecha [0.0, 1.0)',
  ),
  'up' => 
  array (
    0 => 'class.random-randomizer.php',
    1 => 'Random\\Randomizer',
  ),
  'prev' => 
  array (
    0 => 'random-randomizer.getint.php',
    1 => 'Random\\Randomizer::getInt',
  ),
  'next' => 
  array (
    0 => 'random-randomizer.nextint.php',
    1 => 'Random\\Randomizer::nextInt',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'es',
    'path' => 'reference/random/random/randomizer/nextfloat.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="random-randomizer.nextfloat" class="refentry">
 <div class="refnamediv">
  <h1 class="refname">Random\Randomizer::nextFloat</h1>
  <p class="verinfo">(PHP 8 &gt;= 8.3.0)</p><p class="refpurpose"><span class="refname">Random\Randomizer::nextFloat</span> &mdash; <span class="dc-title">Devuelve un float seleccionado del intervalo abierto a la derecha [0.0, 1.0)</span></p>

 </div>

 <div class="refsect1 description" id="refsect1-random-randomizer.nextfloat-description">
  <h3 class="title">Descripción</h3>
  <div class="methodsynopsis dc-description">
   <span class="modifier">public</span> <span class="methodname"><strong>Random\Randomizer::nextFloat</strong></span>(): <span class="type"><a href="language.types.float.php" class="type float">float</a></span></div>

  <p class="para rdfs-comment">
   Devuelve un float seleccionado de manera uniforme y equidistribuida del intervalo abierto a la derecha
   de <code class="literal">0.0</code> hasta, pero sin incluir, <code class="literal">1.0</code>.
  </p>

  <p class="para">
   La probabilidad de que un float devuelto esté en un subintervalo dado abierto a la derecha
   es proporcional al tamaño del subintervalo.

   Esto significa que la probabilidad de que un float sea <em>menor que</em> <code class="literal">0.5</code>
   es del 50 %, lo cual es igual a la probabilidad de que un float sea <em>al menos</em> <code class="literal">0.5</code>.

   Del mismo modo, la probabilidad de que un float esté en el intervalo abierto a la derecha de
   <code class="literal">0.2</code> hasta, pero sin incluir, <code class="literal">0.25</code>
   es exactamente del 5 %.
  </p>

  <p class="para">
   Esta propiedad permite utilizar fácilmente <span class="methodname"><strong>Random\Randomizer::nextFloat()</strong></span>
   para generar un bool aleatorio con una probabilidad dada verificando si el float devuelto es
   <em>menor que</em> una probabilidad dada.
  </p>

  <blockquote class="note"><p><strong class="note">Nota</strong>: 
   <p class="para">
    El dominio de los floats devueltos por <span class="methodname"><strong>Random\Randomizer::nextFloat()</strong></span>
    es idéntico al de <code class="code">Randomizer::getFloat(0.0, 1.0, IntervalBoundary::ClosedOpen)</code>.
   </p>

   <p class="para">
    La implementación interna de <span class="methodname"><strong>Random\Randomizer::nextFloat()</strong></span> es más
    eficiente.
   </p>
  </p></blockquote>

  <div class="caution"><strong class="caution">Precaución</strong>
   <p class="para">
    Escalar el valor devuelto a un intervalo diferente utilizando la multiplicación
    o la adición (una transformación afín) podría resultar en un sesgo
    en el valor resultante, ya que los floats no son igualmente densos a lo largo de la línea
    de los números. Como no todos los valores pueden ser representados exactamente por un float, el
    resultado de la transformación afín podría también resultar en valores fuera
    del intervalo solicitado debido a redondeos implícitos.

    Una <a href="random-randomizer.getfloat.php#random-randomizer.getfloat.affine-transformation" class="link">explicación detallada</a>
    de los problemas con la transformación afín se proporciona en la documentación
    para <span class="methodname"><a href="random-randomizer.getfloat.php" class="methodname">Random\Randomizer::getFloat()</a></span>.
   </p>
   <p class="para">
    Utilizar <span class="methodname"><a href="random-randomizer.getfloat.php" class="methodname">Random\Randomizer::getFloat()</a></span> para generar un
    float aleatorio en un intervalo arbitrario. Utilizar <span class="methodname"><a href="random-randomizer.getint.php" class="methodname">Random\Randomizer::getInt()</a></span>
    para generar un integer aleatorio en un intervalo arbitrario.
   </p>
  </div>
 </div>


 <div class="refsect1 parameters" id="refsect1-random-randomizer.nextfloat-parameters">
  <h3 class="title">Parámetros</h3>
  <p class="para">Esta función no contiene ningún parámetro.</p>
 </div>


 <div class="refsect1 returnvalues" id="refsect1-random-randomizer.nextfloat-returnvalues">
  <h3 class="title">Valores devueltos</h3>
  <p class="para">
   Un float seleccionado de manera uniforme en el intervalo abierto a la derecha
   (<code class="literal">IntervalBoundary::ClosedOpen</code>) [0.0, 1.0).

   <code class="literal">0.0</code> es un valor de retorno posible, <code class="literal">1.0</code> no lo es.
  </p>
 </div>


 <div class="refsect1 errors" id="refsect1-random-randomizer.nextfloat-errors">
  <h3 class="title">Errores/Excepciones</h3>
  <ul class="itemizedlist">
   
 <li class="listitem">
  <span class="simpara">
   Cualquier <span class="classname"><a href="class.throwable.php" class="classname">Throwable</a></span> lanzado por el método <span class="methodname"><a href="random-engine.generate.php" class="methodname">Random\Engine::generate()</a></span>
   del <a href="class.random-randomizer.php#random-randomizer.props.engine" class="link"><code class="literal">Random\Randomizer::$engine</code></a> subyacente.
  </span>
 </li>

  </ul>
 </div>


 <div class="refsect1 examples" id="refsect1-random-randomizer.nextfloat-examples">
  <h3 class="title">Ejemplos</h3>
  <div class="example" id="example-1">
   <p><strong>Ejemplo #1 Ejemplo de <span class="methodname"><strong>Random\Randomizer::nextFloat()</strong></span></strong></p>
   <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$r </span><span style="color: #007700">= new </span><span style="color: #0000BB">\Random\Randomizer</span><span style="color: #007700">();<br /><br /></span><span style="color: #FF8000">// El resultado del bool será verdadero con la probabilidad dada.<br /></span><span style="color: #0000BB">$chance </span><span style="color: #007700">= </span><span style="color: #0000BB">0.5</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">$bool </span><span style="color: #007700">= </span><span style="color: #0000BB">$r</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">nextFloat</span><span style="color: #007700">() &lt; </span><span style="color: #0000BB">$chance</span><span style="color: #007700">;<br /><br />echo (</span><span style="color: #0000BB">$bool </span><span style="color: #007700">? </span><span style="color: #DD0000">"You won" </span><span style="color: #007700">: </span><span style="color: #DD0000">"You lost"</span><span style="color: #007700">), </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

   <div class="example-contents"><p>Resultado del ejemplo anterior es similar a:</p></div>
   <div class="example-contents screen">
<div class="annotation-interactive examplescode"><pre class="examplescode">You won</pre>
</div>
   </div>
  </div>

  <div class="example" id="example-2">
   <p><strong>Ejemplo #2 Escalado incorrecto utilizando una transformación afín</strong></p>
   <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">final class </span><span style="color: #0000BB">MaxEngine </span><span style="color: #007700">implements </span><span style="color: #0000BB">Random\Engine </span><span style="color: #007700">{<br />    public function </span><span style="color: #0000BB">generate</span><span style="color: #007700">(): </span><span style="color: #0000BB">string </span><span style="color: #007700">{<br />        return </span><span style="color: #DD0000">"\xff"</span><span style="color: #007700">;<br />    }<br />}<br /><br /></span><span style="color: #0000BB">$randomizer </span><span style="color: #007700">= new </span><span style="color: #0000BB">\Random\Randomizer</span><span style="color: #007700">(new </span><span style="color: #0000BB">MaxEngine</span><span style="color: #007700">);<br /><br /></span><span style="color: #0000BB">$min </span><span style="color: #007700">= </span><span style="color: #0000BB">3.5</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$max </span><span style="color: #007700">= </span><span style="color: #0000BB">4.5</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// NO HACER ESTO:<br />//<br />// Esto mostrará 4.5, a pesar de que nextFloat() muestree<br />// desde un intervalo abierto a la derecha, que nunca devolverá 1.<br /></span><span style="color: #0000BB">printf</span><span style="color: #007700">(</span><span style="color: #DD0000">"Wrong scaling: %.17g"</span><span style="color: #007700">, </span><span style="color: #0000BB">$randomizer</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">nextFloat</span><span style="color: #007700">() * (</span><span style="color: #0000BB">$max </span><span style="color: #007700">- </span><span style="color: #0000BB">$min</span><span style="color: #007700">) + </span><span style="color: #0000BB">$min</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// Correcto:<br />// $randomizer-&gt;getFloat($min, $max, \Random\IntervalBoundary::ClosedOpen);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

   <div class="example-contents"><p>El ejemplo anterior mostrará:</p></div>
   <div class="example-contents screen">
<div class="annotation-interactive examplescode"><pre class="examplescode">Wrong scaling: 4.5</pre>
</div>
   </div>
  </div>
 </div>


 <div class="refsect1 seealso" id="refsect1-random-randomizer.nextfloat-seealso">
  <h3 class="title">Ver también</h3>
  <ul class="simplelist">
   <li><span class="methodname"><a href="random-randomizer.getfloat.php" class="methodname" rel="rdfs-seeAlso">Random\Randomizer::getFloat()</a> - Devuelve un float seleccionado uniformemente</span></li>
  </ul>
 </div>


</div><?php manual_footer($setup); ?>