C++ 11 случайное число двигатели должны реализовать функцию-член discard(unsigned long long z)
(§26.5.1.4), которая продвигает последовательность случайных чисел на z
шагов. Гарантия сложности довольно слабая: «не хуже сложность z
последовательных звонков e()
». Этот элемент, очевидно, существует исключительно, чтобы сделать возможным подвергать более производительным реализации, если это возможно, как примечание 274 состояния:
Эта операция обычно используется в коде пользователя, и часто могут быть реализованы в манере двигателя конкретного так, чтобы обеспечивают значительную производительность улучшений над эквивалентным наивным циклом, который составляет z
последовательных звонков e()
.
Учитывая discard
вы можете легко реализовать ваши требования для извлечения n
-го числа в последовательности, пересев генератора, отбрасывая n-1
значения и используя следующее сгенерированное значение.
Я не знаю, какие из стандартных двигателей RNG могут быть применены к эффективным реализациям discard
. Возможно, стоит потратить немного времени на изучение и профилирование.
С помощью tweak вы можете генерировать случайные числа в определенном диапазоне, например, если вам нужны случайные числа только с 0-36, тогда вы можете легко достичь этого, используя оператор% (например, rand()% 36) с rand() но я не знаю никакой встроенной функции, которая будет принимать X в качестве входного сигнала для getRand (X) и генерировать что-то f (X) каждый раз. – Saby