elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  Sobre la función rand()
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Sobre la función rand()  (Leído 3,171 veces)
#Aitor

Desconectado Desconectado

Mensajes: 173



Ver Perfil
Sobre la función rand()
« en: 30 Diciembre 2014, 00:09 am »

Siempre he tenido la duda de como Rand, genera números al azar...

Código
  1. int rand ( int $min , int $max )

Código
  1. $random = rand ( 0 , 10 );

Para este caso, la variable random tendría un valor al azar entre 0 y 10, (11 posibles combinaciones), la duda está en... de esos 11, cómo coge uno al azar?

Me imagino un while, recorriendo todos los números y rompiéndose en cualquier momento, pero cómo? Y dicho sea de paso, hay alguna forma de ver como está funcionando una función(valga la redundancia), por dentro?

Saludos!


En línea

Mi algoritmo en PHP (estupideces y más).
Código
  1. while($Se_feliz){
  2.  Piensa_un_OBJETIVO(); // Sin excusas!
  3.  if($Tienes_un_objetivo){
  4.    Suspira(); // Sé paciente.
  5.    if($Consigues_el_objetivo){ echo "¡Felicidades #Aitor!";return;
  6.      //RETURN; ¿O volvemos a empezar?
  7.    }else{
  8.      Inténtalo_de_nuevo();
  9.    }
  10.  }
  11. }
MinusFour
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.529


I'm fourth.


Ver Perfil WWW
Re: Sobre la función rand()
« Respuesta #1 en: 30 Diciembre 2014, 01:37 am »

Siempre he tenido la duda de como Rand, genera números al azar...

Código
  1. int rand ( int $min , int $max )

Código
  1. $random = rand ( 0 , 10 );

Para este caso, la variable random tendría un valor al azar entre 0 y 10, (11 posibles combinaciones), la duda está en... de esos 11, cómo coge uno al azar?

Me imagino un while, recorriendo todos los números y rompiéndose en cualquier momento, pero cómo? Y dicho sea de paso, hay alguna forma de ver como está funcionando una función(valga la redundancia), por dentro?

Saludos!

Son algoritmos pseudoaleatorios:

http://es.wikipedia.org/wiki/Generador_de_n%C3%BAmeros_pseudoaleatorios

Y puedes ver las sources de php para una funcion en especifico. I.e. rand:

https://github.com/php/php-src/blob/4b943c9c0dd4114adc78416c5241f11ad5c98a80/ext/standard/rand.c


En línea

#Aitor

Desconectado Desconectado

Mensajes: 173



Ver Perfil
Re: Sobre la función rand()
« Respuesta #2 en: 31 Diciembre 2014, 11:35 am »

Gracias por responder, cómo era de esperar no entiendo ni pio de como funciona el código que contiene rand...

Lo que no termino de comprender es por qué es pseudoaleatorios...

Citar
Un generador pseudoaleatorio de números (GPAN) es un algoritmo que produce una sucesión de números que es una muy buena aproximación a un conjunto aleatorio de números.

¿Cómo es posible que se califique de una aproximación a una aletatoridad?

Significa, ¿que es posible llegar a entender el funcionamiento y por ello saber con antelación que número escogerá?

Y luego, esto...

Citar
"La generación de números aleatorios es demasiado importante como para ser dejado al azar."

Precisamente, ser aleatorio, es escoger algo al azar, ¿no?, si yo tengo una hurna con 5 bolas de 5 colores diferentes, y escojo una, estoy escogiendo una al azar, es decir, aleatorio, ¿no?

¿Qué están haciendo realmente los algoritmos peudoaleatorios?

Saludos!
En línea

Mi algoritmo en PHP (estupideces y más).
Código
  1. while($Se_feliz){
  2.  Piensa_un_OBJETIVO(); // Sin excusas!
  3.  if($Tienes_un_objetivo){
  4.    Suspira(); // Sé paciente.
  5.    if($Consigues_el_objetivo){ echo "¡Felicidades #Aitor!";return;
  6.      //RETURN; ¿O volvemos a empezar?
  7.    }else{
  8.      Inténtalo_de_nuevo();
  9.    }
  10.  }
  11. }
MinusFour
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.529


I'm fourth.


Ver Perfil WWW
Re: Sobre la función rand()
« Respuesta #3 en: 31 Diciembre 2014, 16:34 pm »

Pseudo significa faux, falso. Son numeros que no son verdaderamente aleatorios pero sirven para una aplicacion que espera algun grado de aleatoridad. Sin embargo, siguen siendo algoritmos que funcionan deterministicamente (Sistema determinista). De manera que conociendo toda la informacion involucrada en el proceso de la creacion del numero aleatorio  (la llave o "seed" y el algoritmo) es posible reproducir el mismo numero. Lo que se utiliza para producir verdaderos numeros aleatorios es "ruido" observado en ciertos dispositivos de hardware. Eventos que son verdaderamente aleatorios e impredecibles. En Linux por ejemplo se usa /dev/random y /dev/urandom, no estoy seguro que haga Windows en ese aspecto.
En línea

#Aitor

Desconectado Desconectado

Mensajes: 173



Ver Perfil
Re: Sobre la función rand()
« Respuesta #4 en: 3 Enero 2015, 17:45 pm »

Pseudo significa faux, falso. Son numeros que no son verdaderamente aleatorios pero sirven para una aplicacion que espera algun grado de aleatoridad. Sin embargo, siguen siendo algoritmos que funcionan deterministicamente (Sistema determinista). De manera que conociendo toda la informacion involucrada en el proceso de la creacion del numero aleatorio  (la llave o "seed" y el algoritmo) es posible reproducir el mismo numero. Lo que se utiliza para producir verdaderos numeros aleatorios es "ruido" observado en ciertos dispositivos de hardware. Eventos que son verdaderamente aleatorios e impredecibles. En Linux por ejemplo se usa /dev/random y /dev/urandom, no estoy seguro que haga Windows en ese aspecto.

Entiendo, ¿entonces es posible que una máquina tragaperras también utilice números pseudoaleatorios?

Código:
Un modelo determinista producirá siempre la misma salida a partir de las mismas condiciones de partida o el estado inicial

Y en el caso de la función Rand(), ¿es posible recrear dicha situación? Ejemplo, usar rand, retorna un número, [forma de recrear la situación anterior] y retornar el mismo número

Edito por si se mal entiende.

Código:
 De manera que conociendo toda la informacion involucrada en el proceso de la creacion del numero aleatorio  (la llave o "seed" y el algoritmo) es posible reproducir el mismo numero.

Básicamente es lo mismo que pregunté, pero me refiero si ya existe alguna función, manera, algo, de recrear la misma situación anterior, por ejemplo no sé dónde leí que en c++, se hacia con la pila interna, de forma que si en un intervalo no muy "alto", digamos que abres el programa dos veces en menos de 60 segundos, el primer valor, siempre será menor que el segundo, porque la pila interna esta en crecimiento.

Muchísimas gracias por tomarte las molestias en responder >.<
« Última modificación: 3 Enero 2015, 17:51 pm por #Aitor » En línea

Mi algoritmo en PHP (estupideces y más).
Código
  1. while($Se_feliz){
  2.  Piensa_un_OBJETIVO(); // Sin excusas!
  3.  if($Tienes_un_objetivo){
  4.    Suspira(); // Sé paciente.
  5.    if($Consigues_el_objetivo){ echo "¡Felicidades #Aitor!";return;
  6.      //RETURN; ¿O volvemos a empezar?
  7.    }else{
  8.      Inténtalo_de_nuevo();
  9.    }
  10.  }
  11. }
engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Sobre la función rand()
« Respuesta #5 en: 3 Enero 2015, 17:48 pm »

Ninguna computadora produce numeros realmente aleatorios, ningún sistema deterministico lo hace, si, un tragaperras es pseudo y normalmente pasa una evaluación de algoritmo para asegurar su constancia y que el jugador pueda ganar
En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
#Aitor

Desconectado Desconectado

Mensajes: 173



Ver Perfil
Re: Sobre la función rand()
« Respuesta #6 en: 3 Enero 2015, 17:55 pm »

Ninguna computadora produce numeros realmente aleatorios, ningún sistema deterministico lo hace, si, un tragaperras es pseudo y normalmente pasa una evaluación de algoritmo para asegurar su constancia y que el jugador pueda ganar

Pero con ruido si se puede crear números aleatorios, no?

Citar
Lo que se utiliza para producir verdaderos números aleatorios es "ruido" observado en ciertos dispositivos de hardware. Eventos que son verdaderamente aleatorios e impredecibles. En Linux por ejemplo se usa /dev/random y /dev/urandom, no estoy seguro que haga Windows en ese aspecto.

¿Se podría decir que el azar no existe? Si a una persona la haces escoger algo al 'azar', ejemplo, 20 cajas numeradas, es probable que opte por coger alguna caja en particular por su número llamativo, dicho de otra forma, ¿su decisión fue tomada al azar? si la haces coger una segunda caja al azar, es probable que sepas qué elección cogerá a partir de su primera elección y conociendo sus números 'favoritos'. ¿Sigue siendo 'azar'?

Mod: No usar [code] para citas.
« Última modificación: 13 Enero 2015, 15:46 pm por #!drvy » En línea

Mi algoritmo en PHP (estupideces y más).
Código
  1. while($Se_feliz){
  2.  Piensa_un_OBJETIVO(); // Sin excusas!
  3.  if($Tienes_un_objetivo){
  4.    Suspira(); // Sé paciente.
  5.    if($Consigues_el_objetivo){ echo "¡Felicidades #Aitor!";return;
  6.      //RETURN; ¿O volvemos a empezar?
  7.    }else{
  8.      Inténtalo_de_nuevo();
  9.    }
  10.  }
  11. }
engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Sobre la función rand()
« Respuesta #7 en: 3 Enero 2015, 18:06 pm »

Son temas ya filosoficos....

Del ruido es delicado, ya que que ruido viene de algun lugar (no solo es ruido de sonido, se considera ruidos a ciertas distorciones, ya sean de sonido, luz, electrico, etc)

El azar viene del caos y en general el caos en muchos casos son patrones organizados que aun no hemos clasificado
En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
MinusFour
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.529


I'm fourth.


Ver Perfil WWW
Re: Sobre la función rand()
« Respuesta #8 en: 3 Enero 2015, 18:16 pm »

Entiendo, ¿entonces es posible que una máquina tragaperras también utilice números pseudoaleatorios?

Código:
Un modelo determinista producirá siempre la misma salida a partir de las mismas condiciones de partida o el estado inicial

Y en el caso de la función Rand(), ¿es posible recrear dicha situación? Ejemplo, usar rand, retorna un número, [forma de recrear la situación anterior] y retornar el mismo número

Edito por si se mal entiende.

Citar
De manera que conociendo toda la informacion involucrada en el proceso de la creacion del numero aleatorio  (la llave o "seed" y el algoritmo) es posible reproducir el mismo numero.

Básicamente es lo mismo que pregunté, pero me refiero si ya existe alguna función, manera, algo, de recrear la misma situación anterior, por ejemplo no sé dónde leí que en c++, se hacia con la pila interna, de forma que si en un intervalo no muy "alto", digamos que abres el programa dos veces en menos de 60 segundos, el primer valor, siempre será menor que el segundo, porque la pila interna esta en crecimiento.

Muchísimas gracias por tomarte las molestias en responder >.<

Mira, de esta forma puedo reproducir el mismo numero con rand_r una y otra vez.

Código
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3.  
  4. int main(int argc, char** argv){
  5. int seed;
  6. unsigned int random;
  7.  
  8. seed = 13;
  9. random = rand_r(&seed);
  10. printf("El numero random es:%d\n", random);
  11. // Otra vez
  12. seed = 13;
  13. random = rand_r(&seed);
  14. printf("El numero random es:%d\n", random);
  15. return 0;
  16. }

Output:
Código
  1. [m1n054@ALEXPC gcc]$ ./ex1
  2. El numero random es:1898476902
  3. El numero random es:1898476902
« Última modificación: 13 Enero 2015, 15:46 pm por #!drvy » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Funcion Rand() con strings en PHP
PHP
Riki_89D 5 9,949 Último mensaje 9 Marzo 2009, 14:37 pm
por cassiani
Duda sobre funcion rand()
Programación C/C++
Oblivi0n 4 3,057 Último mensaje 17 Junio 2010, 00:09 am
por cbug
Programa funcion rand()
Programación C/C++
hocius 4 3,171 Último mensaje 9 Octubre 2010, 22:30 pm
por hocius
Ayuda con la función rand.
Programación C/C++
Felipe_Henriquez 5 4,794 Último mensaje 31 Octubre 2011, 20:20 pm
por Queta
Función rand sin repeticiones
Programación C/C++
alejandro70 3 2,221 Último mensaje 29 Julio 2015, 09:37 am
por do-while
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines