Любые причины не использовать Random.NextDouble
, а затем отливать до float
? Это даст вам поплавок от 0 до 1.
Если вам нужна другая форма «лучшего», вам нужно будет указать свои требования. Обратите внимание, что Random
не следует использовать для таких важных вопросов, как финансы или безопасность, и вы должны, как правило, повторно использовать существующий экземпляр во всей своей заявке или по одному на поток (поскольку Random
не является потокобезопасным).
EDIT: Как было предложено в комментариях, чтобы преобразовать это в диапазоне 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: Теперь вы упомянули, что это для модульного тестирования, я не уверен, что это идеальный подход. Вероятно, вам следует проверить конкретные значения - убедитесь, что вы тестируете образцы в каждой из соответствующих категорий - бесконечности, NaNs, денормальные числа, очень большие числа, ноль и т. Д.
4.0 - случайный выбранный честным броском кубиков с плавающей точкой. –
@ JesseC.Slicer Вы забыли указать ссылку: http://xkcd.com/221/ – jpmc26