¿Alguna razón para no usar Random.NextDouble
y luego convertir a float
? Eso le dará un flotador entre 0 y 1.
Si desea una forma diferente de "mejor", deberá especificar sus requisitos. Tenga en cuenta que Random
no debe utilizarse para asuntos delicados, como finanzas o seguridad, y generalmente debe reutilizar una instancia existente en su aplicación, o una por hilo (ya que Random
no es seguro para subprocesos).
EDIT: Como se sugiere en los comentarios, para convertir a un rango de float.MinValue
, float.MaxValue
:
// Perform arithmetic in double type to avoid overflowing
double range = (double) float.MaxValue - (double) float.MinValue;
double sample = rng.NextDouble();
double scaled = (sample * range) + float.MinValue;
float f = (float) scaled;
EDIT: Ahora que usted ha mencionado que esto es para la unidad de pruebas, no estoy seguro de que es una enfoque ideal. Probablemente debería probar con valores concretos en su lugar, asegurándose de probar con muestras en cada una de las categorías relevantes: infinitos, NaNs, números denormales, números muy grandes, cero, etc.
4.0 - aleatorio elegido por el lanzamiento de dados de coma flotante. –
@ JesseC.Slicer Olvidó proporcionar el enlace: http://xkcd.com/221/ – jpmc26