Me gustaría hacer números al azar en un rango específico, como "elegir un número aleatorio entre 18 y 35"? ¿Cómo puedo hacer eso con la función rand()
?¿Cómo usar la función rand para hacer números en un rango específico?
Respuesta
Si esto está escrito en C, entonces estás muy cerca. Compilar este código:
#include <stdio.h>
#include <stdlib.h>
int main() {
int i;
for (i = 0; i < 1000000; i++) {
printf("%d\n", rand()%(35-18+1)+18);
}
}
y ejecutarlo en una tubería produce esta salida:
[email protected]:~$ gcc -o test test.c
[email protected]:~$ ./test | sort | uniq -c
55470 18
55334 19
55663 20
55463 21
55818 22
55564 23
55322 24
55886 25
55947 26
55554 27
55342 28
55526 29
55719 30
55435 31
55669 32
55818 33
55205 34
55265 35
La clave es que se olvidó de añadir 1 - the fencepost error.
Puede generalizar esta en una función:
int random_between(int min, int max) {
return rand() % (max - min + 1) + min;
}
Esta técnica introduce un sesgo de distribución donde el divisor no es un múltiplo par de MAX_RAND. – NealB
@NealB: Sí, pensé en mencionar eso. Sin embargo, la solución no es trivial, y para los datos de prueba donde la distribución perfecta no es un gran problema, no vale la pena el esfuerzo. – cdhowie
La solución es bastante trivial, ver mi respuesta ... – NealB
asumen rand() le dará un número entre 0 y 1,0
luego use rand() * (35 - 18) + 18 para obtener un número aleatorio entre 18 y 35 años
Edición: se no necesito mod para esto
'rand()' en C devuelve 'int', que no es un tipo de coma flotante. Los documentos para 'rand()' indican que devuelve un número entero entre 0 y 'RAND_MAX', inclusive. – cdhowie
-1 supuesto erróneo –
? Quien te dijo que era C. Java Math.random() da un número aleatorio entre 0 y 1. –
- ¿Quieres enteros de sólo?
- ¿Desea una distribución uniforme?
- ¿Desea incluir los valores 18 y 35 como posibles valores?
- ¿Qué idioma prefiere usar?
en general, si rand() devuelve un valor flotante en [0.0 ... 1.0) (es decir, es posible obtener valores arbitrariamente cerca de 1.0 pero en realidad no 1) entonces va a querer algo así como
hi = 36
lo = 18
res = int((hi-lo)*rand() + lo) # returns random values in 18..35
tenga en cuenta que esto nunca va a volver realidad el valor hi - por lo tanto tengo incrementa por 1 (es decir, obtendrá todos los valores desde 18 a 35 inclusive, pero nunca 36).
Espero que ayude.
Dependiendo del idioma que esté utilizando, el generador de números aleatorios incorporado puede tener esta capacidad - investigue un poco más.
Supongamos que el generador de números aleatorios que siempre tiene devuelve números en un rango determinado. Solo por cuestión de argumento, digamos que el rango es 0..65536 pero quiere números aleatorios en el rango Bajo ... Alto, 18..35 en su ejemplo.
La manera incorrecta de hacerlo sería algo así como:
r = (rand() % (High - Low + 1)) + Low
rand() devuelve un número en el rango 0..65536. Tome el resto después de dividir por (Alto - Bajo + 1) que en este ejemplo es (35 - 18 + 1 = 18). El resultado es un número entre 0..17. A esto se agrega Low (18) que cambia el resultado, r, dentro del rango 18..35. El rango que está buscando.
Los números generados de esta manera no tienen una distribución uniforme en los casos en que el divisor usó para obtener el resto no es un múltiplo par del límite superior devuelto por función rand(). Vea el Fischer Yates Algorithm - Modulo Bias. Para eliminar este sesgo, necesita calcular el número más grande que es más pequeño que lo que rand() devuelve, pero se divide equitativamente entre (Alto - Bajo + 1). En su caso que es 3640 * 18 = 65520. utilizar esto como un filtro de alta gama en los números devueltos por rand() como sigue:
do forever {
r = rand()
if r <= 65520 then {
r = (r % (High - Low + 1)) + Low
break
}
}
Ahora los números aleatorios se generan deben tener la misma distribución características como rand().
+1 para las matemáticas correctas. –
- 1. ¿Cómo puedo generar números aleatorios sin la función rand()?
- 2. ¿Cuántos números de coma flotante distintos en un rango específico?
- 3. Números aleatorios en un rango
- 4. ¿Cómo siembro la función rand() en Objective-C?
- 5. Usando el caso para un rango de números en Bash
- 6. Generando un rango de números en MySQL
- 7. Hacer un rango en postgres
- 8. Verifique un rango de números en una condición if
- 9. en bitset, ¿puedo usar "to_ulong" para un rango específico de bits?
- 10. Hacer una lista de números espaciados uniformemente en un cierto rango en python
- 11. reemplazar rand() con openssl_random_pseudo_bytes()
- 12. ¿Cómo puedo agregar números no secuenciales a un rango?
- 13. Modificar el rango de un generador de números aleatorios uniforme
- 14. Generar "en rango" números aleatorios en C
- 15. ¿Cómo puedo barajar un rango específico de una ArrayList?
- 16. Regex para un rango numérico de números negativos?
- 17. Administrador de Django: ¿Cómo puedo filtrar en un campo entero para un rango específico de valores?
- 18. jquery - cómo usar errorPlacement para un elemento específico?
- 19. SQL ROWNUM cómo devolver filas entre un rango específico
- 20. ¿Cómo puedo usar numpy.correlate para hacer la autocorrelación?
- 21. Comparar números de versión sin usar la función de división
- 22. Cómo usar un PDF específico IFilter
- 23. Cómo calcular la media, la mediana, el modo y el rango de un conjunto de números
- 24. Cómo asignar números en el rango <0;99> al rango <-1.0;1.0>?
- 25. Convertir un rango de números a otro rango, manteniendo la proporción
- 26. usando rand para generar un número aleatorio
- 27. Cómo usar TinyXml para analizar un elemento específico
- 28. Encontrar el LCM de un rango de números
- 29. ¿Cómo funciona Rand()? ¿Tiene ciertas tendencias? ¿Hay algo mejor para usar?
- 30. PHP - ¿Es rand (1,1000) = 1000 tan probable como rand (1,1000) = rand (1,1000)?
iv intenté rand% (35-18) +18 y ahora sé que crea un error –
¿Qué idioma estás usando? –
No entiendo lo que estás haciendo con (35-18) +18. ¿No sería eso solo 35? o__O –