Я опубликовал кучу генераторов случайных чисел с открытым исходным кодом on my site, включая генератор случайных чисел с нормально распределенным распределением. Чтобы генерировать случайное целое число в диапазоне 10-20, я бы написал что-то вроде new NormalRandomGenerator(10, 20).Next()
.Использование двойников для генерации случайного целого
Кто отправил этот комментарий:
Просто интересно, является ли это необходимо для реализации «Int Next()» в терминах «двойного NextDouble()», в качестве ИНТ двойных преобразований (и визы-Versa) может быть очень медленным на некоторых аппаратных средствах, в том числе на недавнем оборудовании ПК , хотя я не особенно современен на последних процессорах на данный момент.
Я считаю, что этот комментарий относится к тому факту, что, когда кто-то называет Next(20)
на одном из моих классов, внутренне, что вызов переводится в нечто вроде (int)someMersenneTwister.NextDouble() * 20
(я не помню, если я округление).
Я реализовал его таким образом, потому что MT является быстрым и эффективным (хотя он имеет огромный случайный период). Из того, что я понимаю, это стандартный способ генерации случайных чисел - вызов Next()
, который возвращает double в диапазоне [0 .. 1), а затем умножает и выводит на int.
Есть ли какие-либо проблемы с точки зрения моего дизайна? Есть ли лучший способ (более результативный, быстрый) генерировать целое случайное число, которое не использует удвоения?
Извините, если это звучит расплывчато. Я не уверен, есть ли здесь проблемы.
Я даже не понимаю, как целые числа в ограниченном диапазоне могут иметь нормальное распределение/Гс. Это распределение возвращает непрерывные значения по всей вещественной оси. – CodesInChaos
Может всегда маскировать биты для меньших чисел, которые, я думаю, будут быстрее. Тогда я ничего не получил. – SimpleVar
Для * равномерных * целых чисел в заданном интервале проверки [мой вопрос] (http://stackoverflow.com/q/9499071/445517) и [моей случайной библиотеки] (https://github.com/MerkatorProject/Merkator.Tools /tree/master/Merkator.Tools/Random) – CodesInChaos