|
|
|
MT_RAND y RAND int mt_rand(minimo, máximo);
Devuelve un número aleatorio entre el mínimo y máximo que nosotros ponemos. La senténcia mt_rand es mejor por dos motivos: es bastante mas rápida que rand() y tiene un mejor algoritmo, digamos que los números seudo-aleatorios que genera son "más aleatorios" que los de rand(). Aparte de estas dos diferencias, tanto rand() / srand() como mt_rand()/mt_srand() funcionan igual, o sea que lo que ahora explicaré para rand() / srand() funciona exactamentre igual en mt_rand() / mt_srand(): Los números que se generan no son realmente aleatorios. Para entendernos, digamos que hay una lista *enorme* de números desordenados, siempre los mismos números. Cuando solicitamos un número a rand() lo toma de esa lista, y cuando le solicitamos otro, toma el siguiente de la lista. Con srand(), lo que hacemos es posicionar el puntero en un lugar de terminado, haced esta prueba:
<?php srand(1000); echo rand(0, 100), `-`, rand(0, 100), `-`, rand(0, 100), ``<BR>``; srand(1000);echo rand(0, 100), `-`, rand(0, 100), `-`, rand(0, 100), ``<BR>``;srand(1000); echo rand(0, 100), `-`, rand(0, 100), `-`, rand(0, 100), ``<BR>``; ?>
Resultado 98-34-54 98-34-54 98-34-54 Siempre que ejecuteis este código apareceran los mismos tres números, 98-34-54, puesto que siempre inicializamos srand() con el mismo número, 1000. Esto es muy útil si quereis generar una lista de números aleatorios, pero quereis que sean siempre los mismos números, por ejemplo, habeis diseñado un juego de ordenador en el que aleatoriamente se genera un laberinto, pero claro, debe generarse siempre el mismo laberinto, para que los jugadores puedan aprender donde están a lo largo de varias partidas. Entonces inicializamos cada vez srand() con el mismo número. Ahora probad esto: <?php srand((double)microtime()*1000000); echo rand(0, 100), `-`, rand(0, 100), `-`, rand(0, 100), `<BR>`; srand((double)microtime()*1000000); echo rand(0, 100), `-`, rand(0, 100), `-`, rand(0, 100), `<BR>`; srand((double)microtime()*1000000); echo rand(0, 100), `-`, rand(0, 100), `-`, rand(0, 100), `<BR>`; ?>
Resultado: 10-32-72 43-6-87 65-98-7 Podeis ver que ahora aparece un resultado distinto cada vez, esto es así porque inicializamos srand() con la función microtime(), que nos devuelve un número tomándolo del reloj del sistema, y por lo tanto es un número distintio cada vez.
|
|