c++ - number - Valor booleano aleatorio
c++ random number between (7)
Estoy intentando generar un int aleatorio que es 0 o 1 en C ++. En este momento, recibo un 0 cada vez que ejecuto este código y no estoy seguro de por qué. ¿Cuál es el problema aquí?
#include <ctime>
#include <cstdlib>
srand(time(0));
int randomval = rand() % 2;
cout << randomval << endl;
En teoría, hay un 50% de probabilidad de que obtengas 0
, y 50 - 1
. Es posible que desee probar con un módulo diferente, por ejemplo, 100, para comprobar si esto funciona. Y estoy seguro de que lo hace.
Acaba de ejecutar este código varias veces, no es suficiente.
Otra idea para probarlo:
srand(time(0));
for( int i = 0; i < 1000000; ++i )
{
assert( 0 == ( rand() % 2 ) );
}
Llamada srand(time(NULL));
sólo una vez.
Luego use un bucle como este, siempre obtendrá un 0 o 1 de esta manera.
#include <stdio.h>
#include <stdlib.h>
srand(time(NULL));
for (i=0;i<10;i++)
{
printf("%d/n",rand() % 2);
i++;
}
return 0;
Me gustaría agregar que cuando usas srand(time(0));
el "número aleatorio" siempre será el mismo en el mismo segundo. Cuando intenté ejecutar su programa 10000 veces y agruparlo por uniq, vi que el número no cambiaría en un segundo.
for i in `seq 1 10000`; do ./a.out; done | uniq -c
693 0
3415 1
675 0
673 1
665 0
674 1
668 0
711 1
694 0
673 1
459 0
No estás verificando contra nada. Utilizar:
#include <ctime>
#include <cstdlib>
srand(time(0));
int randomval = rand() % 2 == 0;
cout << randomval << endl;
Sé que esta es una pregunta antigua, pero creo que responde a la pregunta correctamente.
No vuelva a sembrar el generador cada vez que ejecute ese código.
Al sembrarlo con el mismo valor cada vez, solo obtendrás el mismo número "aleatorio". Recuerde que este es un generador de números pseudoaleatorios, por lo que, en función del valor inicial, se generará un número "aleatorio". Así que si lo pones con el mismo número cada vez que vas a obtener el mismo número cada vez.
La solución es llamar a srand (time (NULL)) solo una vez en la ejecución de su programa. Luego, cada llamada a rand () te dará un número diferente cada vez.
Se llama mala suerte. Pruébalo otra vez.
bool random() {
if (rand() % 2 == 0)
return true;
else return false;
}