rand() algo prohibido

Iniciado por Komodo, 31 Agosto 2010, 10:57 AM

0 Miembros y 1 Visitante están viendo este tema.

Komodo

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.

#include <iostream>
#include <cstdlib> //tiene la definicion de la funcion RAND (random)
using namespace std;
int main ()
{
  int cantidad;
  cout << "Cuantos numeros quiere generar?" << endl;
  cin >> cantidad;
  for (int contador =1 ; contador <= cantidad ; contador++)
    {
      cout << "\n" <<(rand()%50000+40000);
    }
  return 0 ;
}


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


Castiblanco

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 (cpp) [Seleccionar]
cout << "\n" <<(rand()%50000+40000);

Si estoy mal me corriges hasta ahora comienzo a aprender.

Saludos...

Castiblanco

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?

rob1104

Cita de: 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?
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
Sin análisis de requisitos o sin diseño, programar es el arte de crear errores en un documento de texto vacío.

Castiblanco

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...

Littlehorse

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.

An expert is a man who has made all the mistakes which can be made, in a very narrow field.

Komodo