<?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 => 'pt_BR',
  ),
  'this' => 
  array (
    0 => 'random-randomizer.nextfloat.php',
    1 => 'Random\\Randomizer::nextFloat',
    2 => 'Obt&eacute;m um float do intervalo aberto &agrave; direita [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' => 'pt_BR',
    '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">Obtém um float do intervalo aberto à direita [0,0, 1,0)</span></p>

 </div>

 <div class="refsect1 description" id="refsect1-random-randomizer.nextfloat-description">
  <h3 class="title">Descrição</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">
   Retorna um float uniformemente selecionado e equidistribuído do intervalo aberto à direita
   de <code class="literal">0.0</code> até, mas não incluindo,
   <code class="literal">1.0</code>.
  </p>

  <p class="para">
   A chance de um float retornado estar dentro de um determinado subintervalo aberto à direita
   é proporcional ao tamanho do subintervalo.

   Isso significa que a chance de um float ser <em>menor que</em> <code class="literal">0.5</code>
   é de 50%, o que é igual à chance de um float ser <em>pelo menos</em> <code class="literal">0.5</code>.

   Da mesma forma, a chance de um float estar dentro do intervalo aberto à direita de
   <code class="literal">0.2</code> até, mas não incluindo, <code class="literal">0.25</code> é
   exatamente 5%.
  </p>

  <p class="para">
   Esta propriedade facilita o uso de <span class="methodname"><strong>Random\Randomizer::nextFloat()</strong></span>
   para gerar um booleano aleatório com uma determinada chance, verificando se o float retornado é
   <em>menor que</em> uma determinada chance.
  </p>

  <blockquote class="note"><p><strong class="note">Nota</strong>: 
   <p class="para">
    O domínio dos floats retornáveis ​​de <span class="methodname"><strong>Random\Randomizer::nextFloat()</strong></span>
    é idêntico ao de <code class="code">Randomizer::getFloat(0.0, 1.0, IntervalBoundary::ClosedOpen)</code>.
   </p>

   <p class="para">
    A implementação interna de <span class="methodname"><strong>Random\Randomizer::nextFloat()</strong></span> é mais
    eficiente.
   </p>
  </p></blockquote>

  <div class="caution"><strong class="caution">Cuidado</strong>
   <p class="para">
    Escalar o valor de retorno para um intervalo diferente usando multiplicação
    ou adição (a chamada transformação afim) pode resultar em um viés
    no valor resultante, já que os floats não são igualmente densos na reta numérica.
    Como nem todos os valores podem ser representados exatamente por um float, o
    resultado da transformação afim também pode resultar em valores fora
    do intervalo solicitado devido ao arredondamento implícito.

    Uma <a href="random-randomizer.getfloat.php#random-randomizer.getfloat.affine-transformation" class="link">explicação detalhada</a>
    dos problemas com a transformação afim é fornecida na documentação
    de <span class="methodname"><a href="random-randomizer.getfloat.php" class="methodname">Random\Randomizer::getFloat()</a></span>.
   </p>
   <p class="para">
    Use <span class="methodname"><a href="random-randomizer.getfloat.php" class="methodname">Random\Randomizer::getFloat()</a></span> para gerar um
    float aleatório dentro de um intervalo arbitrário. Use <span class="methodname"><a href="random-randomizer.getint.php" class="methodname">Random\Randomizer::getInt()</a></span>
    para gerar um inteiro aleatório dentro de um intervalo arbitrário.
   </p>
  </div>
 </div>


 <div class="refsect1 parameters" id="refsect1-random-randomizer.nextfloat-parameters">
  <h3 class="title">Parâmetros</h3>
  <p class="para">Esta função não possui parâmetros.</p>
 </div>


 <div class="refsect1 returnvalues" id="refsect1-random-randomizer.nextfloat-returnvalues">
  <h3 class="title">Valor Retornado</h3>
  <p class="para">
   Um float uniformemente selecionado e equidistribuído do intervalo aberto à direita (<code class="literal">IntervalBoundary::ClosedOpen</code>)
   [0,0, 1,0).

   <code class="literal">0.0</code> é um possível valor de retorno, <code class="literal">1.0</code> não é.
  </p>
 </div>


 <div class="refsect1 errors" id="refsect1-random-randomizer.nextfloat-errors">
  <h3 class="title">Erros/Exceções</h3>
  <ul class="itemizedlist">
   
 <li class="listitem">
  <span class="simpara">
   Qualquer erro ou exceção <span class="classname"><a href="class.throwable.php" class="classname">Throwable</a></span> lançados pelo método <span class="methodname"><a href="random-engine.generate.php" class="methodname">Random\Engine::generate()</a></span>
   do mecanismo <a href="class.random-randomizer.php#random-randomizer.props.engine" class="link"><code class="literal">Random\Randomizer::$engine</code></a> subjacente.
  </span>
 </li>

  </ul>
 </div>


 <div class="refsect1 examples" id="refsect1-random-randomizer.nextfloat-examples">
  <h3 class="title">Exemplos</h3>
  <div class="example" id="example-1">
   <p><strong>Exemplo #1 Exemplo 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">// O booleano resultante será verdadeiro com a chance fornecida.<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">"Você ganhou" </span><span style="color: #007700">: </span><span style="color: #DD0000">"Você perdeu"</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>O exemplo acima produzirá
algo semelhante a:</p></div>
   <div class="example-contents screen">
<div class="annotation-interactive examplescode"><pre class="examplescode">Você ganhou</pre>
</div>
   </div>
  </div>

  <div class="example" id="example-2">
   <p><strong>Exemplo #2 Escala incorreta usando uma transformação afim</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">// NÃO FAÇA ISTO:<br />//<br />// Isso retornará 4.5, apesar da amostragem nextFloat() de<br />// um intervalo aberto à direita, que nunca retornará 1.<br /></span><span style="color: #0000BB">printf</span><span style="color: #007700">(</span><span style="color: #DD0000">"Escala errada: %.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">// Correto:<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>O exemplo acima produzirá:</p></div>
   <div class="example-contents screen">
<div class="annotation-interactive examplescode"><pre class="examplescode">Escala errada: 4.5</pre>
</div>
   </div>
  </div>
 </div>


 <div class="refsect1 seealso" id="refsect1-random-randomizer.nextfloat-seealso">
  <h3 class="title">Veja Também</h3>
  <ul class="simplelist">
   <li><span class="methodname"><a href="random-randomizer.getfloat.php" class="methodname" rel="rdfs-seeAlso">Random\Randomizer::getFloat()</a> - Obt&eacute;m um float selecionado uniformemente</span></li>
  </ul>
 </div>


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