C++: ¿Por qué es necesario multiplicar por 1.0 al generar un número aleatorio?
Utilizo el código de la siguiente manera para generar un número aleatorio entre 10000 y 60000.
(int)round(1.0 * rand() / RAND_MAX * 50000 + 10000)
Mi pregunta es ¿por qué se multiplica por 1.0 en 1.0 * rand()
, y cuál es la diferencia con solo usar rand()
, sin multiplicar por 0.1?
¡Agradezco mucho sus respuestas!
davy.ai
La razón por la cual se utiliza
1.0 * rand()
es para convertir el resultado derand()
(que es un número entero) en un valor decimal. Al multiplicarlo por1.0
, obtenemos un número de punto flotante en lugar de un entero. Esto es importante porque necesitamos dividirlo porRAND_MAX
(que también es un valor de punto flotante) para obtener un valor entre 0 y 1. Si no lo convirtiéramos primero en un número de punto flotante, la división resultaría en 0, ya que ambos operandos son enteros y la división de enteros siempre da un valor entero.Entonces, para resumir, multiplicamos
rand()
por1.0
para obtener un número de punto flotante para que podamos dividirlo correctamente porRAND_MAX
y obtener un valor aleatorio entre 0 y 1. Este número aleatorio se multiplica luego por50000
(la diferencia entre los límites superior e inferior) y se le suma10000
(el límite inferior) para generar un número aleatorio entre10000
y60000
.