<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/class.random-engine.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'es',
  ),
  'this' => 
  array (
    0 => 'random-engine.generate.php',
    1 => 'Random\\Engine::generate',
    2 => 'Genera aleatoriedad',
  ),
  'up' => 
  array (
    0 => 'class.random-engine.php',
    1 => 'Random\\Engine',
  ),
  'prev' => 
  array (
    0 => 'class.random-engine.php',
    1 => 'Random\\Engine',
  ),
  'next' => 
  array (
    0 => 'class.random-cryptosafeengine.php',
    1 => 'Random\\CryptoSafeEngine',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'es',
    'path' => 'reference/random/random/engine/generate.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="random-engine.generate" class="refentry">
 <div class="refnamediv">
  <h1 class="refname">Random\Engine::generate</h1>
  <p class="verinfo">(PHP 8 &gt;= 8.2.0)</p><p class="refpurpose"><span class="refname">Random\Engine::generate</span> &mdash; <span class="dc-title">Genera aleatoriedad</span></p>

 </div>

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

  <p class="para rdfs-comment">
   Retorna aleatoriedad y avanza el estado del algoritmo en un paso.
  </p>
  <p class="para">
   La aleatoriedad está representada por una cadena binaria que contiene octetos aleatorios. Esta representación
   permite interpretar sin ambigüedad los bits aleatorios generados por el algoritmo, por ejemplo para
   tener en cuenta los diferentes tamaños de salida utilizados por los distintos algoritmos.
  </p>
  <p class="para">
   Los algoritmos que operan nativamente sobre valores enteros deben retornar el entero con los octetos en orden
   little-endian, por ejemplo utilizando la función <span class="function"><a href="function.pack.php" class="function">pack()</a></span> con el código de formato
   <code class="literal">P</code>. La interfaz de alto nivel proporcionada por el
   <span class="classname"><a href="class.random-randomizer.php" class="classname">Random\Randomizer</a></span> interpretará los octetos aleatorios retornados como enteros no signados
   little-endian si se requiere una representación numérica.
  </p>
  <p class="para">
   Se recomienda encarecidamente que cada bit de la cadena retornada sea seleccionado de manera uniforme e independiente,
   ya que ciertas aplicaciones requieren aleatoriedad a nivel de bits para funcionar correctamente.
   Por ejemplo, los generadores congruenciales lineales generan a menudo aleatoriedad de menor calidad para los bits
   de menor peso del valor entero retornado y por lo tanto no serían adecuados para aplicaciones
   que requieren aleatoriedad a nivel de bits.
  </p>
 </div>


 <div class="refsect1 parameters" id="refsect1-random-engine.generate-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-engine.generate-returnvalues">
  <h3 class="title">Valores devueltos</h3>
  <p class="para">
   Una cadena no vacía que contiene octetos aleatorios.
  </p>

  <blockquote class="note"><p><strong class="note">Nota</strong>: 
   <span class="simpara">
    El <span class="classname"><a href="class.random-randomizer.php" class="classname">Random\Randomizer</a></span> utiliza internamente enteros no signados de 64 bits.
    Si la cadena retornada contiene más de 64 bits (8 octetos) de aleatoriedad, los octetos excedentes
    serán ignorados. Otras aplicaciones pueden ser capaces de procesar más de 64 bits a la vez.
   </span>
  </p></blockquote>
 </div>


 <div class="refsect1 errors" id="refsect1-random-engine.generate-errors">
  <h3 class="title">Errores/Excepciones</h3>
  <ul class="itemizedlist">
   <li class="listitem">
    <span class="simpara">
     Si la generación de aleatoriedad falla, una <span class="classname"><a href="class.random-randomexception.php" class="classname">Random\RandomException</a></span>
     debe ser emitida. Cualquier otra <span class="classname"><a href="class.exception.php" class="classname">Exception</a></span> emitida durante la generación debería ser
     capturada y envuelta en una <span class="classname"><a href="class.random-randomexception.php" class="classname">Random\RandomException</a></span>.
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     Si la cadena retornada está vacía, una <span class="classname"><a href="class.random-brokenrandomengineerror.php" class="classname">Random\BrokenRandomEngineError</a></span>
     será emitida por el <span class="classname"><a href="class.random-randomizer.php" class="classname">Random\Randomizer</a></span>.
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     Si el algoritmo implementado está fuertemente sesgado, una <span class="classname"><a href="class.random-brokenrandomengineerror.php" class="classname">Random\BrokenRandomEngineError</a></span>
     puede ser emitida por el <span class="classname"><a href="class.random-randomizer.php" class="classname">Random\Randomizer</a></span> para evitar bucles infinitos
     si un muestreo por rechazo es necesario para retornar resultados no sesgados.
    </span>
   </li>
  </ul>
 </div>


 <div class="refsect1 examples" id="refsect1-random-engine.generate-examples">
  <h3 class="title">Ejemplos</h3>
  <div class="example" id="example-1">
   <p><strong>Ejemplo #1 Ejemplo de <span class="function"><strong>Random\Engine::generate()</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 /></span><span style="color: #FF8000">/**<br /> * Implementa un Generador Congruencial Lineal con módulo 65536,<br /> * un multiplicador de 61 y un incremento de 17, retornando un entero de 8 bits.<br /> *<br /> * Nota: Este motor solo puede ser utilizado con fines de demostración.<br /> *       Los generadores congruenciales lineales generalmente<br /> *       generan aleatoriedad de baja calidad y esta implementación específica tiene<br /> *       un período muy corto de 16 bits que no es adecuado para<br /> *       casi todos los casos de uso en el mundo real.<br /> */<br /></span><span style="color: #007700">final class </span><span style="color: #0000BB">LinearCongruentialGenerator </span><span style="color: #007700">implements </span><span style="color: #0000BB">\Random\Engine<br /></span><span style="color: #007700">{<br />    private </span><span style="color: #0000BB">int $state</span><span style="color: #007700">;<br /><br />    public function </span><span style="color: #0000BB">__construct</span><span style="color: #007700">(?</span><span style="color: #0000BB">int $seed </span><span style="color: #007700">= </span><span style="color: #0000BB">null</span><span style="color: #007700">)<br />    {<br />        if (</span><span style="color: #0000BB">$seed </span><span style="color: #007700">=== </span><span style="color: #0000BB">null</span><span style="color: #007700">) {<br />            </span><span style="color: #0000BB">$seed </span><span style="color: #007700">= </span><span style="color: #0000BB">random_int</span><span style="color: #007700">(</span><span style="color: #0000BB">0</span><span style="color: #007700">, </span><span style="color: #0000BB">0xffff</span><span style="color: #007700">);<br />        }<br /><br />        </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">state </span><span style="color: #007700">= </span><span style="color: #0000BB">$seed </span><span style="color: #007700">&amp; </span><span style="color: #0000BB">0xffff</span><span style="color: #007700">;<br />    }<br /><br />    public function </span><span style="color: #0000BB">generate</span><span style="color: #007700">(): </span><span style="color: #0000BB">string<br />    </span><span style="color: #007700">{<br />        </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">state </span><span style="color: #007700">= (</span><span style="color: #0000BB">61 </span><span style="color: #007700">* </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">state </span><span style="color: #007700">+ </span><span style="color: #0000BB">17</span><span style="color: #007700">) &amp; </span><span style="color: #0000BB">0xffff</span><span style="color: #007700">;<br /><br />        return </span><span style="color: #0000BB">pack</span><span style="color: #007700">(</span><span style="color: #DD0000">'C'</span><span style="color: #007700">, </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">state </span><span style="color: #007700">&gt;&gt; </span><span style="color: #0000BB">8</span><span style="color: #007700">);<br />    }<br />}<br /><br /></span><span style="color: #0000BB">$r </span><span style="color: #007700">= new </span><span style="color: #0000BB">\Random\Randomizer</span><span style="color: #007700">(<br />    new </span><span style="color: #0000BB">LinearCongruentialGenerator</span><span style="color: #007700">(</span><span style="color: #0000BB">seed</span><span style="color: #007700">: </span><span style="color: #0000BB">1</span><span style="color: #007700">)<br />);<br /><br />echo </span><span style="color: #DD0000">"Número afortunado: "</span><span style="color: #007700">, </span><span style="color: #0000BB">$r</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">getInt</span><span style="color: #007700">(</span><span style="color: #0000BB">0</span><span style="color: #007700">, </span><span style="color: #0000BB">99</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>El ejemplo anterior mostrará:</p></div>
   <div class="example-contents screen">
<div class="annotation-interactive examplescode"><pre class="examplescode">Número afortunado: 4</pre>
</div>
   </div>
  </div>
 </div>


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