Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Komodo en 31 Agosto 2010, 10:57 am



Título: rand() algo prohibido
Publicado por: Komodo en 31 Agosto 2010, 10:57 am
Bueno todos sabemos para lo que sirve rand() y srand() y que el RAND_MAX vale 0x7FFFU (32767)

Vamos que el mayor número pseudo-aleatorio que nos puede retornar un programa que use rand() es 32767..

Pero me pudo la curiosidad.

Código
  1. #include <iostream>
  2. #include <cstdlib> //tiene la definicion de la funcion RAND (random)
  3. using namespace std;
  4. int main ()
  5. {
  6.  int cantidad;
  7.  cout << "Cuantos numeros quiere generar?" << endl;
  8.  cin >> cantidad;
  9.  for (int contador =1 ; contador <= cantidad ; contador++)
  10.    {
  11.      cout << "\n" <<(rand()%50000+40000);
  12.    }
  13.  return 0 ;
  14. }

Y si, como no hay semilla pues como que siempre saldran los mismos numeros, pero todos ellos son mayores de 32767 yo me esperaba algun error algo raro, pero veo que eso del valor máximo se lo salta.

Saludos y lo corro desde Windows.

Ahora lo probare desde GNU/Linux


Título: Re: rand() algo prohibido
Publicado por: Castiblanco en 31 Agosto 2010, 13:49 pm
No entendí muy bien :p

Osea el número máximo que puedes obtener es 32767, hasta ahí bien pero te asombras porque le salen números mayores?

Aquí no le estas sumando un cantidad grande, entonces como te va a dar menos de 32767...

Código
  1. cout << "\n" <<(rand()%50000+40000);

Si estoy mal me corriges hasta ahora comienzo a aprender.

Saludos...


Título: Re: rand() algo prohibido
Publicado por: Castiblanco en 31 Agosto 2010, 14:49 pm
La verdad sí XD

Bueno entonces... esa linea saca un número al random creo bien hasta aquí? luego le saca el residuo del número que le dio contra 50000 como ese número no puede ser tan grande da el mismo número y al final le suma 40k

Si hace eso?


Título: Re: rand() algo prohibido
Publicado por: rob1104 en 31 Agosto 2010, 16:59 pm
La verdad sí XD

Bueno entonces... esa linea saca un número al random creo bien hasta aquí? luego le saca el residuo del número que le dio contra 50000 como ese número no puede ser tan grande da el mismo número y al final le suma 40k

Si hace eso?
Efectivamente hace eso.

Segun veo es una confusión nada mas. Ya que rand() como debe ser genera numeros hasta 32767, pero al final le esta sumando los 40000, lo cual es una operacion aparte. En fin, espero que sea eso :S


Título: Re: rand() algo prohibido
Publicado por: Castiblanco en 31 Agosto 2010, 23:26 pm
Yo igual. pero como Lord R.N.A. habla con tanta seguridad y no se siento que me dice que no es verdad, me la pase pensando en el bus si estaba en lo cierto y no vi que estuviera cometiendo errores :p

Saludos...


Título: Re: rand() algo prohibido
Publicado por: Littlehorse en 31 Agosto 2010, 23:30 pm
Ademas de lo que dijo rob1104, cabe destacar que la constante RAND_MAX depende de la plataforma.


He borrado y reportado algunos mensajes. Si no saben comportarse por favor, no posteen.



Título: Re: rand() algo prohibido
Publicado por: Komodo en 2 Septiembre 2010, 11:20 am
Muy bien, gracias.

Saludos.