Me gustaría generar un número aleatorio de coma flotante entre 2 valores. ¿Cuál es la mejor manera de hacer esto en C#?¿Cómo se genera un número aleatorio en C#?
Respuesta
Lo único que añadiría a la respuesta de Eric es una explicación; Siento que el conocimiento de por qué funciona el código es mejor que saber qué código funciona.
La explicación es la siguiente: supongamos que quiere un número entre 2.5 y 4.5. El rango es 2.0 (4.5 - 2.5). NextDouble
solo devuelve un número entre 0 y 1.0, pero si lo multiplica por el rango obtendrá un número entre 0 y rango.
lo tanto, esto nos daría dobles azar entre 0.0 y 2.0:
rng.NextDouble() * 2.0
Pero, queremos que entre 2,5 y 4,5! Cómo hacemos esto? Agregue el número más pequeño, 2.5:
2.5 + rng.NextDouble() * 2.0
Ahora, obtenemos un número entre 0.0 y 2.0; si agrega 2.5 a cada uno de estos valores, vemos que el rango ahora está entre 2.5 y 4.5.
Al principio pensé que importaba si b> a o a> b, pero si lo resuelves en ambos sentidos, encontrarás que funciona de manera idéntica siempre y cuando no estropees el orden de las variables usado. Me gusta expresarlo con nombres de variables más largos por lo que no se confundan:
double NextDouble(Random rng, double min, double max) { return min + (rng.NextDouble() * (max - min)); }
// generate a random number starting with 5 and less than 15
Random r = new Random();
int num = r.Next(5, 15);
en dobles se puede reemplazar con NextDouble Siguiente
System.Random r = new System.Random();
double rnd(double a, double b)
{
return a + r.NextDouble()*(b-a);
}
Cómo azar? Si se puede tratar con pseudo-aleatorio entonces simplemente:
Random randNum = new Random();
randNum. NextDouble(Min, Max);
Si desea una "mejor" de números aleatorios, entonces es probable que debe buscar en el algoritmo Mersenne Twister. Mucha gente hav already implemented it para usted aunque
Aquí hay un fragmento de cómo obtener números aleatorios Cryographically seguras: Esto llenará en los 8 bytes con un fuerte crytographically secuencia de valores aleatorios.
byte[] salt = new byte[8];
RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
rng.GetBytes(salt);
Para más detalles ver How Random is your Random??" (inspirado por un artículo codinghorror en la baraja el mazo)
Para una explicación de por qué Longhorn ha sido downmodded tanto: http://msdn.microsoft.com/en-us/magazine/cc163367.aspx Look para la ejecución de NextDouble y la explicación de lo es un doble al azar.
Ese enlace también es un buen ejemplo de cómo usar números aleatorios criptográficos (como se menciona Sameer) solo con salidas realmente útiles en lugar de una secuencia de bits.
- 1. ¿Cómo se genera un número aleatorio en tiempo de ejecución?
- 2. Número aleatorio CUDA que genera
- 3. ¿Generar un número aleatorio dentro del rango?
- 4. Número aleatorio en iphone sdk?
- 5. Produce un número aleatorio en un rango usando C#
- 6. ¿Cómo generar un número aleatorio en Bash?
- 7. ¿Cómo obtener un número aleatorio en JSTL?
- 8. ¿Cómo obtener un número aleatorio en pascal?
- 9. Número aleatorio en un bucle
- 10. Genera un gran gráfico plano aleatorio
- 11. ¿Cómo restablecer un motor de número aleatorio?
- 12. Generando un número aleatorio excluyendo el rango
- 13. ¿Cómo se genera un número de pedido único?
- 14. generando un número aleatorio con una distribución específica en c
- 15. generar un número aleatorio corto en java?
- 16. Número aleatorio no repetitivo
- 17. ¿Cómo se genera el número de serie en una consulta?
- 18. genera un número aleatorio entre 1 yx donde es más probable un número menor que uno más alto
- 19. Generar un número aleatorio con el preprocesador C
- 20. ¿Cree un número aleatorio entre -100 y 100 en JavaScript?
- 21. generar un número aleatorio con 7 dígitos
- 22. ¿Por qué este programa C genera un número negativo?
- 23. ¿Cómo se genera un sessionID?
- 24. ¿Cada máquina genera el mismo resultado de número aleatorio usando la misma semilla?
- 25. Generar un número aleatorio de N-dígitos
- 26. ¿Cómo generar un número aleatorio "grande" en Python?
- 27. Algoritmo para generar un número aleatorio
- 28. ¿Cómo obtener un número aleatorio entre un rango de flotación?
- 29. cambiar probabilidad de obtener un número aleatorio
- 30. Aleatorio.Siguiente no está dando un número aleatorio
Eso no es realmente exacto. NextDouble genera solo entre 0.0 y 1.0. – Bloodyaugust
NextDouble() no toma argumentos de lo que puedo ver. –