¿Qué es el generador de números aleatorios en C #?

Un generador de números aleatorios es una biblioteca incorporada en C # que genera números enteros y números de punto flotante al azar. Cada vez que se invoca el método relevante de la biblioteca, devuelve un número aleatorio. Una serie de números aleatorios es un conjunto de números que no siguen ningún patrón. El generador de números aleatorios en C # tiende a generar una serie de este tipo cada vez que se invoca.

Clase aleatoria en C #

  • Entonces, ¿cómo genera C # una serie de números aleatorios? La respuesta se encuentra dentro de la clase aleatoria del espacio de nombres del sistema C #.
  • La clase aleatoria es una clase de generador de números pseudoaleatorios. Esto significa que esta clase tiene la tarea de generar una serie de números que no siguen ningún patrón. Pero, ¿es una máquina realmente capaz de generar números aleatorios? ¿Cómo sabría la máquina qué número generar a continuación? Después de todo, la máquina está diseñada para seguir instrucciones y ejecutar algoritmos.
  • No, la máquina no puede generar números aleatorios por sí sola. Existe un algoritmo matemático definido, basado en el reloj actual y el estado de la máquina, que lo guía para elegir números de un conjunto. Todos los números en el conjunto tienen la misma probabilidad de ser recogidos. Por lo tanto, no son perfectamente al azar. Ellos siguen un patrón. Es solo que el patrón es lo suficientemente aleatorio para cumplir con los requisitos humanos prácticos.

Pseudo y seguro

La siguiente pregunta que viene a la mente es ¿por qué lo llaman clase de generador de números pseudoaleatorios? Comprendamos esto a través del comportamiento humano de la vida real. Cuando se le pide a un ser humano que seleccione un color aleatorio, elige un color determinado. Digamos que eligió amarillo. ¿Qué le hizo elegir el amarillo? Podría ser su color favorito o el color de su entorno, o podría haber estado pensando en algo amarillo en ese momento. Este comportamiento humano que impulsa la decisión de elegir algo al azar se llama Semilla en el mundo de la aleatoriedad. La semilla es el disparador o el punto de inicio de la aleatoriedad.

Ahora, cuando la semilla es predecible, los números aleatorios se vuelven menos aleatorios. Luego se llaman números pseudoaleatorios. Cuando son impredecibles, se llaman números aleatorios seguros.

C # Random Class utiliza la marca de tiempo actual como la semilla, que es muy predecible. Y por lo tanto, el término clase generador de números pseudoaleatorios.

Clase RNGCryptoServiceProvider

La clase RNGCryptoServiceProvider del espacio de nombres System.Security.Cryptography es capaz de generar números aleatorios seguros, que pueden usarse como contraseñas.

Funciones de generador de números aleatorios en C #

Lo primero para generar un número aleatorio en C # es inicializar la clase Random. Esto lo puede hacer cualquiera de los dos constructores de la clase:

  • Aleatorio (): Inicializa un objeto de la clase Aleatoria utilizando un valor de inicialización basado en el tiempo. El valor inicial es la marca de tiempo actual de la máquina. Aunque, en versiones posteriores, esto se cambió para estar basado en GUID.
  • Aleatorio (Int32): Inicializa un objeto de la clase Aleatoria utilizando el valor inicial especificado. Para obtener el siguiente número aleatorio de la serie, llamamos al método Next () de la clase Random.
  • Next (): Devuelve un entero Int32 pseudoaleatorio no negativo.
  • Siguiente (Int32): Devuelve un entero Int32 pseudoaleatorio no negativo menor que el entero especificado.
  • Siguiente (Int32, Int32): Devuelve un entero Int32 pseudoaleatorio no negativo dentro del rango especificado.

Generadores de números aleatorios enteros en C #

Veamos un ejemplo de cómo generar enteros aleatorios:

Ejemplo 1

El siguiente ejemplo genera números aleatorios Int32.

Código:

using System;
public class Program
(
public static void Main()
(
Random rnd = new Random();
for (int i = 0; i < 10; i++)
Console.WriteLine("Random number (0) : (1)", i + 1, GenerateRandomInt(rnd));
)
public static int GenerateRandomInt(Random rnd)
(
return rnd.Next();
)
)

Salida:

Ejemplo # 2

El siguiente ejemplo genera números Int32 aleatorios en el rango de 0 a 100.

Código:

using System;
public class Program
(
public static void Main()
(
Random rnd = new Random();
for (int i = 0; i < 10; i++)
Console.WriteLine("Random number (0) : (1)", i + 1, GenerateRandomInt(rnd));
)
public static int GenerateRandomInt(Random rnd)
(
return rnd.Next(100);
)
)

Salida:

Ejemplo # 3

El siguiente ejemplo genera números Int32 aleatorios en el rango de 50 a 100.

Código:

using System;
public class Program
(
public static void Main()
(
Random rnd = new Random();
for (int i = 0; i < 10; i++)
Console.WriteLine("Random number (0) : (1)", i + 1, GenerateRandomInt(rnd));
)
public static int GenerateRandomInt(Random rnd)
(
return rnd.Next(50, 100);
)
)

Salida:

Generando números de coma flotante

Veamos un ejemplo de cómo generar números aleatorios de coma flotante:

Ejemplo 1

El siguiente ejemplo genera números aleatorios Int32.

Código:

using System;
public class Program
(
public static void Main()
(
Random rnd = new Random();
for (int i = 0; i < 10; i++)
Console.WriteLine("Random number (0) : (1)", i + 1, GenerateRandomInt(rnd));
)
public static double GenerateRandomInt(Random rnd)
(
return rnd.NextDouble();
)
)

Salida:

Un error muy común

El error más común que cometen los desarrolladores al generar números aleatorios es que para cada número aleatorio, crean un nuevo objeto de clase aleatoria. Como se ilustra en el siguiente ejemplo:

Ejemplo 1

Código:

using System;
public class Program
(
public static void Main()
(
for (int i = 0; i < 10; i++)
Console.WriteLine("Random number (0) : (1)", i + 1, GenerateRandomInt());
)
public static int GenerateRandomInt()
(
Random rnd = new Random(); //a very common mistake
return rnd.Next();
)
)

Salida:

¿Cómo los números aleatorios son todos iguales y por qué sucedió esto?

Como se explicó en el funcionamiento de Random Class, los números generados se basan en el valor inicial y el estado actual de la máquina. Cualquier instancia de clase aleatoria comienza con el valor semilla, guarda el estado actual y lo usa para generar el siguiente número aleatorio. En el código anterior, el error fue crear una nueva instancia de la clase Random en cada iteración del bucle. Entonces, antes de que cambie la hora en el reloj interno, el código se ejecuta completamente y cada instancia de la clase Random se instancia con el mismo valor de inicialización. Esto da como resultado el mismo conjunto de números generados cada vez.

Conclusión: generador de números aleatorios en C #

En este artículo, aprendimos sobre el generador de números aleatorios en C # y cómo funciona internamente para generar números aleatorios. También aprendimos brevemente el concepto de números pseudoaleatorios y seguros-aleatorios. Esta información es suficiente para que los desarrolladores utilicen la clase Random en sus aplicaciones. Profunda inmersión, si está interesado en explorar más sobre números aleatorios para contraseñas y contraseñas de un solo uso.

Artículos recomendados

Esta es una guía para el generador de números aleatorios en C #. Aquí discutimos cómo funciona el generador de números aleatorios, el concepto de números pseudoaleatorios y aleatorios seguros y el uso del número aleatorio. También puede consultar nuestros otros artículos relacionados para obtener más información:

  1. Funciones matemáticas en C #
  2. Destructor en C #
  3. Número inverso en Python
  4. Variables en C #
  5. Variables en JavaScript
  6. Generador de números aleatorios en Matlab
  7. Versiones de Tableau
  8. Generador de números aleatorios en JavaScript
  9. Generador de números aleatorios en PHP