sirve repetir rango que para numeros generar decimales arreglo aleatorios c# floating-point random

c# - repetir - generar numeros aleatorios en un arreglo en c++



¿Cómo se genera un número aleatorio en C#? (6)

¿Qué tan aleatorio? Si puede tratar con pseudoaleatorio, simplemente:

Random randNum = new Random(); randNum. NextDouble(Min, Max);

Si quieres un número aleatorio "mejor", entonces probablemente deberías mirar el algoritmo Mersenne Twister. Mucha gente ya lo ha implementado para ti

Me gustaría generar un número aleatorio de punto flotante entre 2 valores. ¿Cuál es la mejor manera de hacer esto en C #?


Aquí hay un fragmento de cómo obtener números aleatorios criográficamente seguros: Esto completará los 8 bytes con una secuencia criptográficamente fuerte de valores aleatorios.

byte[] salt = new byte[8]; RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider(); rng.GetBytes(salt);

Para obtener más información, consulta ¿Cuál es tu Random aleatorio? " (Inspirado en un artículo de CodingHorror sobre barajar barajas)


Lo único que agregarí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: digamos que quieres 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 .

Entonces, esto nos daría dobles aleatorios entre 0.0 y 2.0:

rng.NextDouble() * 2.0

¡Pero, los queremos 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 forma idéntica, siempre y cuando no estropees el orden de las variables utilizadas. Me gusta expresarlo con nombres de variable más largos para no confundirme:

double NextDouble(Random rng, double min, double max) { return min + (rng.NextDouble() * (max - min)); }


Para una explicación de por qué Longhorn se ha reducido tanto: http://msdn.microsoft.com/en-us/magazine/cc163367.aspx Busque la implementación de NextDouble y la explicación de qué es un doble aleatorio.

Ese enlace también es un buen ejemplo de cómo usar números aleatorios criptográficos (como se menciona Sameer) solo con resultados útiles reales en lugar de un flujo de bits.


// generate a random number starting with 5 and less than 15 Random r = new Random(); int num = r.Next(5, 15);

Para dobles, puedes reemplazar Next por NextDouble


System.Random r = new System.Random(); double rnd( double a, double b ) { return a + r.NextDouble()*(b-a); }