Nota: Por motivos de brevedad, lo siguiente no distinguirá entre aleatoriedad y pseudoaleatoriedad. También, en este contexto, constreñidos significa entre dado min y max valores)Generación de valores (pseudo) aleatorios de (U) Int64 y Decimal
La clase System.Random
proporciona la generación aleatoria de números enteros, dobles y matrices de bytes. Usando Random.Next, uno puede generar fácilmente valores restringidos aleatorios de tipo Boolean, Char, (S) Byte, (U) Int16, (U) Int32. Usando Random.NextDouble()
, uno puede generar de manera similar valores restringidos de tipos Doble e Individual (en lo que se refiere a mi comprensión de este tipo). Generación de cadenas aleatorias (de una longitud y un alfabeto determinados) hasalsobeentackledbefore.
Considere los tipos de datos primitivos restantes (excluyendo el objeto): decimal e (U) Int64. También se ha abordado su generación aleatoria (Decimal, (U)Int64 usando Random.NextBytes()
), pero no cuando está restringida. El muestreo de rechazo (es decir, el bucle hasta que el valor generado es el rango deseado) podría usarse teóricamente, pero obviamente no es una solución práctica. La normalización NextDouble()
no funcionará porque no tiene suficientes dígitos significativos.
En resumen, estoy pidiendo para la correcta aplicación de las siguientes funciones:
long NextLong(long min, long max)
long NextDecimal(decimal min, decimal max)
Tenga en cuenta que, dado que System.DateTime
se basa en un ulong, la primera función permitiría la generación constreñido al azar de tales estructuras como bien (similar a here, solo en tics en lugar de minutos).
¡Gracias por las pautas! +1 –
¿De verdad es tan difícil? Me debe estar perdiendo algo, porque mi primer pensamiento fue utilizar 'Random.NextBytes' y usar operaciones bit a bit para aplicarlos a los bits decimales apropiados para obtener un valor entre 0 y 1. –