- Как использовать рандом
- C# WinForm. Функция Random
- C windows forms random
- Требования Requirements
- Сводка Summary
- Краткие советы Quick Tips
- Примеры Examples
- Списки по категориям Categorized Listing
- Равномерные генераторы случайных чисел Uniform Random Number Generators
- Недетерминистический генератор Non-Deterministic Generator
- Определения типа механизма с предварительно заданными параметрами Engine Typedefs with Predefined Parameters
- Шаблоны механизмов Engine Templates
- Шаблоны адаптеров механизмов Engine Adaptor Templates
- Распределения случайных чисел Random Number Distributions
- Равномерные распределения Uniform Distributions
- Распределения Бернулли Bernoulli Distributions
- Нормальные распределения Normal Distributions
- Распределения Пуассона Poisson Distributions
- Выборочные распределения Sampling Distributions
- Служебные функции Utility Functions
- Операторы Operators
- Механизмы и дистрибутивы Engines and Distributions
- Двигатели Engines
- Дистрибутивы Distributions
- Замечания Remarks
Как использовать рандом
Рандом с появлением групбоксов, рандом с расположением ответов в программе тестирования
Дали задание сделать тест с рандом выдачей вопросов(групбокс) и рандом расположения.
Рандом в пайтон (аппаратный рандом для генерации паролей)
суть такова есть такой скрипт на питоне wavBuf = dwParam1.contents if.
VBScript-овский рандом совсем не рандом
Не знаю, может я ошибаюсь, но по-моему VBScript-овский рандом совсем не рандом, т.е., генерит он.
как работает рандом?
как работает рандом? допусти тут диапозон огромный.а он выводит числа почти одинаковые 18908 18934.
Спасибо, а как сделать так что бы оно при повторном нажатии прибавляло ещё значение.
Добавлено через 9 минут
А хатя, нет.
Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.
как генерируется рандом?
Вопрос как генерируется случайное число (rand) , есть ли какая то закономерность , какие факторы.
Как сделать рандом?
Имеется код: Sub Numbers() Dim a() a = Array(1, 2, 3, 4, 5, 6) Dim b As String Randomize b.
Как убрать рандом?
Как убрать рандом? Возможно глупый вопрос, но я первый курс и не могу сообразить! ( unit Unit1;.
Как убрать рандом?
Вот код- Я вписываю к-ство элементов матрицы и в программе рандомно подбираються числа,а нужно.
C# WinForm. Функция Random
Функция Random. Запись в файл. Чтение файла
Всем доброго времени суток!:)У меня в Lable ставятся числа Randomom. 10 чисел. Как написать код.
функция Random
подскажите пожалуйста какие действия осуществляются при вводе оператора random? просто мне нужен.
Функция random
Вот эта вот функция у меня выводит пять сообщений с числами от 1 до 99 for i := 1 to 5 do begin.
Функция random
Первым Вашим испытанием является написание собственной (очень странной) функции.
Ты в какой-то соц.сети есть? У меня просто ещё некоторые вопросы остались.
мне нужно написать программу на C# WinForm для тренировки/проверки памяти человека. Примерный аналог программы вот :: http://www.yugzone.ru/download. rSetup.exe
Добавлено через 22 секунды
Мне кажется тут лучше использовать listBox.
Получить значение из listBox можно так
Спасибо. А вот ещё вопрос остался. Как сделать так , чтоб числа менялись за определённый промежуток времени?
Добавлено через 46 секунд
Мне кажется тут лучше использовать listBox.
Получить значение из listBox можно так
Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.
Функция Random
Вопрос следующего рода: задавая выражения вида х:=random(3) мы должны будем получить в результате.
Функция Random
помогите, пожалуйста! Почему-то отказывается выполнять программу с Random. Пишу: a = int() .
Функция random
Не хотелось создавать целую тему ради этого, но все же. За дэльфи сижу всего второй раз.
Функция Random!?
Задание: Создать функцию random( n ), которая возвращает случайное целое число от 0 включительно до.
C windows forms random
Определяет средства для генерации случайных чисел с равномерным распределением. Defines facilities for random number generation, allowing creation of uniformly distributed random numbers.
Требования Requirements
Заголовок: Header:
Пространство имен: std Namespace: std
Библиотека использует инструкцию «#include «. The library uses the `#include ‘ statement.
Сводка Summary
Генератор случайных чисел — это объект, формирующий последовательность из псевдослучайных чисел. A random number generator is an object that produces a sequence of pseudo-random values. Генератор, который выдает значения с равномерным распределением в указанном диапазоне, называют равномерным генератором случайных чисел (РГСЧ). A generator that produces values that are uniformly distributed in a specified range is a Uniform Random Number Generator (URNG). Шаблон класса, предназначенный для работы в качестве РГСЧ, называется подсистемой , если этот класс имеет некоторые общие признаки, которые обсуждаются далее в этой статье. A class template designed to function as a URNG is referred to as an engine if that class has certain common traits, which are discussed later in this article. РГСЧ может объединяться и обычно объединяется с распределением путем передачи РГСЧ в качестве аргумента в operator() распределения для получения значений, распределенных в соответствии с заданным распределением. A URNG can be—and usually is—combined with a distribution by passing the URNG as an argument to the distribution’s operator() to produce values that are distributed in a manner that is defined by the distribution.
Эти ссылки ведут к основным разделам статьи. These links jump to the major sections of this article:
Краткие советы Quick Tips
Вот несколько советов по использованию . Here are some tips to keep in mind when using :
В большинстве случаев РГСЧ формируют необработанные значения, которые упорядочиваются распределением. For most purposes, URNGs produce raw bits that must be shaped by distributions. (Исключением служит функция std::shuffle(), так как она использует РГСЧ напрямую.) (A notable exception to this is std::shuffle() because it uses a URNG directly.)
Один экземпляр РГСЧ или распределения не может безопасно вызываться параллельно, так как использование РГСЧ или распределения — это операция изменения. A single instantiation of a URNG or distribution cannot safely be called concurrently because running a URNG or distribution is a modifying operation. Дополнительные сведения см. в разделе Потоковая безопасность в стандартной библиотеке C++. For more information, see Thread Safety in the C++ Standard Library.
Предлагаются предварительно заданные определения типов для нескольких механизмов. Это рекомендуемый способ создания РГСЧ при использовании механизма. Predefined typedefs of several engines are provided; this is the preferred way to create a URNG if an engine is being used.
Самое полезное сочетание для большинства приложений — это механизм mt19937 с uniform_int_distribution , как показано в примере кода далее в этой статье. The most useful pairing for most applications is the mt19937 engine with uniform_int_distribution , as shown in the code example later in this article.
В заголовке можно выбрать различные варианты ; любой из них предпочтительнее устаревшей функции библиотеки времени выполнения C rand() . There are many options to choose from in the header, and any of them is preferable to the outdated C Runtime function rand() . Для информации о недостатках rand() и о том, как работает с этими недостатками, см. это видео. For information about what’s wrong with rand() and how addresses these shortcomings, see this video.
Примеры Examples
В следующем примере кода показана генерация случайных чисел; в этом случае пять из них используют генератор, созданный с недетерминистическим начальным значением. The following code example shows how to generate some random numbers in this case five of them using a generator created with non-deterministic seed.
Это высококачественные случайные числа, они разные при каждом запуске этой программы, но не обязательно находятся в полезном диапазоне. While these are high quality random numbers and different every time this program is run, they are not necessarily in a useful range. Для управления диапазоном следует использовать однородное распределение, как показано в следующем коде: To control the range, use a uniform distribution as shown in the following code:
В следующем примере кода показан более реалистичный набор случаев использования с однородно распределенными генераторами случайных чисел, перемешивающих содержимое векторов и массивов. The next code example shows a more realistic set of use cases with uniformly distributed random number generators shuffling the contents of a vector and an array.
Этот код показывает два разных метода рандомизации (вектора целых чисел и перемешивания массива индексированных данных) с помощью тестовой функции шаблона. This code demonstrates two different randomizations—randomize a vector of integers and shuffle an array of indexed data—with a test template function. В первом вызове тестовой функции используется криптобезопасный, недетерминистический, неповторяющийся РГСЧ random_device без начального значения. The first call to the test function uses the crypto-secure, non-deterministic, not-seedable, non-repeatable URNG random_device . Во втором вызове в качестве РГСЧ используется mersenne_twister_engine с детерминистическим 32-разрядным постоянным начальным значением; это означает, что результаты повторяются. The second test run uses mersenne_twister_engine as URNG, with a deterministic 32-bit constant seed, which means the results are repeatable. В третьем вызове для mersenne_twister_engine используется 32-разрядное недетерминистическое значение — результат выполнения random_device . The third test run seeds mersenne_twister_engine with a 32-bit non-deterministic result from random_device . В четвертом вызове применяется последовательность начальных значений, заполненная результатами выполнения random_device , что обеспечивает рандомизацию лучше, чем 32-разрядный недетерминистический подход (но все еще не обеспечивает криптобезопасность). The fourth test run expands on this by using a seed sequence filled with random_device results, which effectively gives more than 32-bit non-deterministic randomness (but still not crypto-secure). Чтобы узнать больше, читайте дальше. For more information, read on.
Списки по категориям Categorized Listing
Равномерные генераторы случайных чисел Uniform Random Number Generators
РГСЧ часто описываются следующими свойствами. URNGs are often described in terms of these properties:
Длина периода: число итераций до повторения последовательности чисел. Period length: How many iterations it takes to repeat the sequence of numbers generated. Чем период длиннее, тем лучше. The longer the better.
Производительность: сколько времени и памяти требуется для получения чисел. Performance: How quickly numbers can be generated and how much memory it takes. Чем меньше, тем лучше. The smaller the better.
Качество: насколько полученная последовательность близка к реальным случайным числам. Quality: How close to true random numbers the generated sequence is. Часто это называется «стохастичностью«. This is often called «randomness«.
В следующих разделах перечислены РГСЧ, доступные в заголовке . The following sections list the uniform random number generators (URNGs) provided in the header.
Недетерминистический генератор Non-Deterministic Generator
Класс random_device random_device Class
Формирует недетерминистическую, криптографическую безопасную случайную последовательность с помощью внешнего устройства. Generates a non-deterministic, cryptographically secure random sequence by using an external device. Обычно используется для получения начального значения для механизма случайных чисел. Usually used to seed an engine. Низкая производительность, очень высокое качество. Low performance, very high quality. Дополнительные сведения см. в разделе Примечания. For more information, see Remarks.
Определения типа механизма с предварительно заданными параметрами Engine Typedefs with Predefined Parameters
Для инициации механизмов и адаптеров. For instantiating engines and engine adaptors. Дополнительные сведения см. в разделе Механизмы и распределения. For more information, see Engines and Distributions.
default_random_engine Механизм по умолчанию. default_random_engine The default engine.
knuth_b Механизм Кнута. knuth_b Knuth engine.
minstd_rand0 Минимальный стандартный механизм 1988 (Льюис, Гудмэн и Миллер [Lewis, Goodman, and Miller], 1969). minstd_rand0 1988 minimal standard engine (Lewis, Goodman, and Miller, 1969).
minstd_rand Обновленный минимальный стандартный механизм minstd_rand0 (Парк, Миллер и Стокмайер [Park, Miller, and Stockmeyer], 1993). minstd_rand Updated minimal standard engine minstd_rand0 (Park, Miller, and Stockmeyer, 1993).
mt19937 32-разрядный механизм типа «Вихрь Мерсенна» (Матсумото и Нишимура [Matsumoto and Nishimura], 1998). mt19937 32-bit Mersenne twister engine (Matsumoto and Nishimura, 1998).
mt19937_64 64-разрядный механизм типа «Вихрь Мерсенна» (Матсумото и Нишимура [Matsumoto and Nishimura], 2000). mt19937_64 64-bit Mersenne twister engine (Matsumoto and Nishimura, 2000).
ranlux24 24-разрядный механизм RANLUX (Мартин Люшер и Фред Джеймс [Martin Lüscher and Fred James], 1994). ranlux24 24-bit RANLUX engine (Martin Lüscher and Fred James, 1994).
ranlux24_base Используется в качестве основания для ranlux24 . ranlux24_base Used as a base for ranlux24 .
ranlux48 48-разрядный механизм RANLUX (Мартин Люшер и Фред Джеймс [Martin Lüscher and Fred James], 1994). ranlux48 48-bit RANLUX engine (Martin Lüscher and Fred James, 1994).
ranlux48_base Используется в качестве основания для ranlux48 . ranlux48_base Used as a base for ranlux48 .
Шаблоны механизмов Engine Templates
Шаблоны механизмов используются как автономные РГСЧ или как базовые механизмы, которые передаются адаптерам механизмов. Engine templates are used as standalone URNGs or as base engines passed to engine adaptors. Обычно они создаются с предварительно заданным определением типа механизма и передаются в распределение. Usually these are instantiated with a predefined engine typedef and passed to a distribution. Дополнительные сведения см. в разделе Механизмы и распределения. For more information, see the Engines and Distributions section.
Имя Name | Описание Description |
---|---|
Класс linear_congruential_engine linear_congruential_engine Class | Создает случайную последовательность, используя линейный конгруэнтный алгоритм. Generates a random sequence by using the linear congruential algorithm. Самый простой с самым низким качеством. Most simplistic and lowest quality. |
Класс mersenne_twister_engine mersenne_twister_engine Class | Создает случайную последовательность, используя алгоритм «Вихрь Мерсенна». Generates a random sequence by using the Mersenne twister algorithm. Самый сложный с самым высоким качеством (кроме класса random_device). Most complex, and is highest quality except for the random_device class. Очень высокая производительность. Very fast performance. |
Класс subtract_with_carry_engine subtract_with_carry_engine Class | Создает случайную последовательность, используя алгоритм вычитания с переносом. Generates a random sequence by using the subtract-with-carry algorithm. Улучшение linear_congruential_engine , но с более низким качеством и производительностью, чем у mersenne_twister_engine . An improvement on linear_congruential_engine , but much lower quality and performance than mersenne_twister_engine . |
Шаблоны адаптеров механизмов Engine Adaptor Templates
Адаптеры механизмов — это шаблоны, адаптирующие другие (базовые) механизмы. Engine adaptors are templates that adapt other (base) engines. Обычно они создаются с предварительно заданным определением типа механизма и передаются в распределение. Usually these are instantiated with a predefined engine typedef and passed to a distribution. Дополнительные сведения см. в разделе Механизмы и распределения. For more information, see the Engines and Distributions section.
Имя Name | Описание Description |
---|---|
Класс discard_block_engine discard_block_engine Class | Создает случайную последовательность, удаляя значения, возвращенные базовым механизмом. Generates a random sequence by discarding values returned by its base engine. |
Класс independent_bits_engine independent_bits_engine Class | Создает случайную последовательность с указанным числом разрядов, перемешивая разряды из значений, возвращенных базовым механизмом. Generates a random sequence with a specified number of bits by repacking bits from the values returned by its base engine. |
Класс shuffle_order_engine shuffle_order_engine Class | Создает случайную последовательность, изменяя порядок значений, возвращенных базовым механизмом. Generates a random sequence by reordering the values returned from its base engine. |
Распределения случайных чисел Random Number Distributions
В следующих разделах перечислены распределения, доступные в заголовке . The following sections list the distributions provided in the header. Распределения — это механизмы постобработки, которые обычно используют результаты РГСЧ в качестве входа и распределяют выходные данные с помощью заданной функции плотности статистической вероятности. Distributions are a post-processing mechanism, usually using URNG output as input and distributing the output by a defined statistical probability density function. Дополнительные сведения см. в разделе Механизмы и распределения. For more information, see the Engines and Distributions section.
Равномерные распределения Uniform Distributions
Имя Name | Описание Description |
---|---|
Класс uniform_int_distribution uniform_int_distribution Class | Формирует равномерное распределение целых чисел в диапазоне, заданном замкнутым интервалом [a, b] (a и b входят в диапазон). Produces a uniform integer value distribution across a range in the closed interval [a, b] (inclusive-inclusive). |
Класс uniform_real_distribution uniform_real_distribution Class | Формирует равномерное распределение вещественных чисел (с плавающей запятой) в диапазоне, заданном полузамкнутым интервалом [a, b) (a включено, b не входит в диапазон). Produces a uniform real (floating-point) value distribution across a range in the half-open interval [a, b) (inclusive-exclusive). |
generate_canonical generate_canonical | Формирует равномерное распределение вещественных чисел (с плавающей запятой) с заданной точностью в диапазоне [0, 1) (0 входит в диапазон, 1 не входит). Produces an even distribution of real (floating point) values of a given precision across [0, 1) (inclusive-exclusive). |
Распределения Бернулли Bernoulli Distributions
Имя Name | Описание Description |
---|---|
Класс bernoulli_distribution bernoulli_distribution Class | Создает распределение Бернулли bool значений. Produces a Bernoulli distribution of bool values. |
Класс binomial_distribution binomial_distribution Class | Формирует биномиальное распределение целых значений. Produces a binomial distribution of integer values. |
Класс geometric_distribution geometric_distribution Class | Формирует геометрическое распределение целых значений. Produces a geometric distribution of integer values. |
Класс negative_binomial_distribution negative_binomial_distribution Class | Формирует отрицательное биномиальное распределение целых значений. Produces a negative binomial distribution of integer values. |
Нормальные распределения Normal Distributions
Имя Name | Описание Description |
---|---|
Класс cauchy_distribution cauchy_distribution Class | Формирует распределение Коши вещественных значений (с плавающей запятой). Produces a Cauchy distribution of real (floating point) values. |
Класс chi_squared_distribution chi_squared_distribution Class | Формирует распределение хи-квадрат вещественных значений (с плавающей запятой). Produces a chi-squared distribution of real (floating point) values. |
Класс fisher_f_distribution fisher_f_distribution Class | Создает F-распределение (также известное как Снедекора F Distribution или распределение Fisher-Snedecor) реальных значений (с плавающей запятой). Produces an F-distribution (also known as Snedecor’s F distribution or the Fisher-Snedecor distribution) of real (floating point) values. |
Класс lognormal_distribution lognormal_distribution Class | Формирует логарифмически нормальное распределение вещественных значений (с плавающей запятой). Produces a log-normal distribution of real (floating point) values. |
Класс normal_distribution normal_distribution Class | Формирует нормальное (Гауссово) распределение вещественных значений (с плавающей запятой). Produces a normal (Gaussian) distribution of real (floating point) values. |
Класс student_t_distribution student_t_distribution Class | Формирует t-распределение Стьюдента вещественных значений (с плавающей запятой). Produces a Student’s t-distribution of real (floating point) values. |
Распределения Пуассона Poisson Distributions
Имя Name | Описание Description |
---|---|
Класс exponential_distribution exponential_distribution Class | Формирует экспоненциальное распределение вещественных значений (с плавающей запятой). Produces an exponential distribution of real (floating point) values. |
Класс extreme_value_distribution extreme_value_distribution Class | Формирует распределение экстремальных вещественных значений (с плавающей запятой). Produces an extreme value distribution of real (floating point) values. |
Класс gamma_distribution gamma_distribution Class | Формирует гамма-распределение вещественных значений (с плавающей запятой). Produces a gamma distribution of real (floating point) values. |
Класс poisson_distribution poisson_distribution Class | Формирует распределение Пуассона целых значений. Produces a Poisson distribution of integer values. |
Класс weibull_distribution weibull_distribution Class | Формирует распределение Вейбулла вещественных значений (с плавающей запятой). Produces a Weibull distribution of real (floating point) values. |
Выборочные распределения Sampling Distributions
Имя Name | Описание Description |
---|---|
Класс discrete_distribution discrete_distribution Class | Формирует дискретное распределение целых чисел. Produces a discrete integer distribution. |
Класс piecewise_constant_distribution piecewise_constant_distribution Class | Формирует кусочно-постоянное распределение вещественных значений (с плавающей запятой). Produces a piecewise constant distribution of real (floating point) values. |
Класс piecewise_linear_distribution piecewise_linear_distribution Class | Формирует кусочно-линейное распределение вещественных значений (с плавающей запятой). Produces a piecewise linear distribution of real (floating point) values. |
Служебные функции Utility Functions
В этом разделе перечислены основные служебные функции, доступные в заголовке . This section lists the general utility functions provided in the header.
Имя Name | Описание Description |
---|---|
Класс seed_seq seed_seq Class | Создает шифрованную порождающую последовательность без смещения. Generates a non-biased scrambled seed sequence. Используется для предотвращения повтора потоков случайных чисел. Used to avoid replication of random variate streams. Полезно, если на основе механизмов инициализируется множество РГСЧ. Useful when many URNGs are instantiated from engines. |
Операторы Operators
В этом разделе перечислены операторы, доступные в заголовке . This section lists the operators provided in the header.
Имя Name | Описание Description |
---|---|
operator== | Проверка на то, что РГСЧ с левой стороны оператора равен механизму с правой стороны. Tests whether the URNG on the left side of the operator is equal to the engine on the right side. |
operator!= | Проверка на то, что РГСЧ с левой стороны оператора не равен механизму с правой стороны. Tests whether the URNG on the left side of the operator is not equal to the engine on the right side. |
operator | Запись сведений о состоянии в поток. Writes state information to a stream. |
operator>> | Извлечение сведений о состоянии из потока. Extracts state information from a stream. |
Механизмы и дистрибутивы Engines and Distributions
Сведения о каждой из этих категорий шаблонов классов, определенных в, см. в следующих разделах . Refer to the following sections for information about each of these class template categories defined in . Обе эти категории шаблонов классов принимают тип в качестве аргумента и используют имена общих параметров шаблона для описания свойств типа, которые разрешены в качестве фактического типа аргумента, следующим образом: Both of these class template categories take a type as an argument and use shared template parameter names to describe the properties of the type that are permitted as an actual argument type, as follows:
IntType Указывает short , int ,, long long long , unsigned short , unsigned int , unsigned long или unsigned long long . IntType indicates a short , int , long , long long , unsigned short , unsigned int , unsigned long , or unsigned long long .
UIntType Указывает unsigned short , unsigned int , unsigned long или unsigned long long . UIntType indicates unsigned short , unsigned int , unsigned long , or unsigned long long .
RealType Указывает float , double или long double . RealType indicates a float , double , or long double .
Двигатели Engines
Шаблоны механизмов и шаблоны адаптеров механизмов — это шаблоны, параметры которых настраивают созданный генератор. Engine Templates and Engine Adaptor Templates are templates whose parameters customize the generator created.
Подсистема — это шаблон класса или класса, экземпляры которого (генераторы) выступают в качестве источника случайных чисел, равномерно распределенных между минимальным и максимальным значениями. An engine is a class or class template whose instances (generators) act as a source of random numbers uniformly distributed between a minimum and maximum value. Адаптер механизма предоставляет последовательность значений с различной стохастичностью, беря значения, сформированные другим механизмом случайных чисел, и применяя к ним определенный алгоритм. An engine adaptor delivers a sequence of values that have different randomness properties by taking values produced by some other random number engine and applying an algorithm of some kind to those values.
Каждый механизм и адаптер механизма содержат следующие члены. Every engine and engine adaptor has the following members:
typedef numeric-type result_type — это тип, возвращаемый генератором operator() . typedef numeric-type result_type is the type that is returned by the generator’s operator() . numeric-type передается как параметр шаблона при создании экземпляра. The numeric-type is passed as a template parameter on instantiation.
result_type operator() возвращает значения, которые равномерно распределены между min() и max() . result_type operator() returns values that are uniformly distributed between min() and max() .
result_type min() возвращает минимальное значение, полученное от функции operator() генератора. result_type min() returns the minimum value that is returned by the generator’s operator() . Адаптеры механизма используют результат функции min() базового механизма. Engine adaptors use the base engine’s min() result.
result_type max() возвращает максимальное значение, полученное от функции operator() генератора. result_type max() returns the maximum value that is returned by the generator’s operator() . Если result_type — это целочисленный тип, то max() — это максимальное значение, которое может быть возвращено (инклюзивное). Если result_type — это вещественное значение, то max() — это наименьшее значение, превышающее все значения, которые могут быть возвращены (неинклюзивное). When result_type is an integral (integer-valued) type, max() is the maximum value that can actually be returned (inclusive); when result_type is a floating-point (real-valued) type, max() is the smallest value greater than all values that can be returned (non-inclusive). Адаптеры механизма используют результат функции max() базового механизма. Engine adaptors use the base engine’s max() result.
void seed(result_type s) задает для генератора начальное значение s . void seed(result_type s) seeds the generator with seed value s . Для механизмов используется сигнатура void seed(result_type s = default_seed) для поддержки параметров по умолчанию (в адаптерах механизмов определена отдельная функция void seed() , как показано далее). For engines, the signature is void seed(result_type s = default_seed) for default parameter support (engine adaptors define a separate void seed() , see next subsection).
template void seed(Seq& q) заполняет генератор с помощью seed_seq Seq . template void seed(Seq& q) seeds the generator by using a seed_seq Seq .
Явный конструктор с аргументом result_type x , который создает генератор, начальное значение которого определяется так же, как при вызове функции seed(x) . An explicit constructor with argument result_type x that creates a generator seeded as if by calling seed(x) .
Явный конструктор с аргументом seed_seq& seq , который создает генератор, начальное значение которого определяется так же, как при вызове функции seed(seq) . An explicit constructor with argument seed_seq& seq that creates a generator seeded as if by calling seed(seq) .
void discard(unsigned long long count) фактически вызывает operator() count время и отменяет каждое значение. void discard(unsigned long long count) effectively calls operator() count times and discards each value.
Адаптеры механизмов также поддерживают следующие члены ( Engine — это первый параметр шаблона адаптера механизма, обозначающий тип базового механизма): Engine adaptors additionally support these members ( Engine is the first template parameter of an engine adaptor, designating the base engine’s type):
Конструктор по умолчанию, который инициализирует генератор так же, как конструктор базового механизма по умолчанию. A default constructor to initialize the generator as if from the base engine’s default constructor.
Явный конструктор с аргументом const Engine& eng . An explicit constructor with argument const Engine& eng . Это необходимо для поддержки конструкции копирования с использованием базового механизма. This is to support copy construction using the base engine.
Явный конструктор с аргументом Engine&& eng . An explicit constructor with argument Engine&& eng . Это необходимо для поддержки конструкции перемещения с использованием базового механизма. This is to support move construction using the base engine.
void seed() инициализирует генератор с использованием начального значения базового механизма по умолчанию. void seed() that initializes the generator with the base engine’s default seed value.
Функция свойства const Engine& base() возвращает базовый механизм, который использовался для создания генератора. const Engine& base() property function that returns the base engine that was used to construct the generator.
Каждый механизм поддерживает состояние, определяющее последовательность значений, которые будут созданы последующими вызовами operator() . Every engine maintains a state that determines the sequence of values that will be generated by subsequent calls to operator() . Состояние двух генераторов, созданных на основе механизмов одного типа, можно сравнить с помощью операторов operator== и operator!= . The states of two generators instantiated from engines of the same type can be compared by using operator== and operator!= . Если два состояния равны, генераторы будут получать одинаковые последовательности значений. If the two states compare as equal, they will generate the same sequence of values. Состояние объекта можно сохранить в поток как последовательность 32-разрядных беззнаковых значений, используя оператор operator генератора. The state of an object can be saved to a stream as a sequence of 32-bit unsigned values by using the operator of the generator. Состояние после сохранения не изменяется. The state is not changed by saving it. Сохраненное состояние можно считать в генератор, созданный на основе механизма того же типа, используя оператор operator>> . A saved state can be read into generator instantiated from an engine of the same type by using operator>> .
Дистрибутивы Distributions
Распределение случайных чисел — это шаблон класса или класса, экземпляры которого преобразуют поток равномерно распределенных случайных чисел, полученных от механизма, в поток случайных чисел с определенным распределением. A Random Number Distributions is a class or class template whose instances transform a stream of uniformly distributed random numbers obtained from an engine into a stream of random numbers that have a particular distribution. У каждого распределения есть следующие члены. Every distribution has the following members:
typedef numeric-type result_type тип, возвращаемый объектом распределения operator() . typedef numeric-type result_type is the type that is returned by the distribution’s operator() . numeric-type передается как параметр шаблона при создании экземпляра. The numeric-type is passed as a template parameter on instantiation.
template result_type operator()(URNG& gen) возвращает значения, которые распределяются в соответствии с определением распределения, используя gen в качестве источника равномерно распределенных случайных значений и сохраненные параметры распределения. template result_type operator()(URNG& gen) returns values that are distributed according to the distribution’s definition, by using gen as a source of uniformly distributed random values and the stored parameters of the distribution.
template result_type operator()(URNG& gen, param_type p) возвращает значения, которые распределены в соответствии с определением распределения, используя gen в качестве источника случайных значений с равномерным распределением и структуру параметров p . template result_type operator()(URNG& gen, param_type p) returns values distributed in accordance with the distribution’s definition, using gen as a source of uniformly distributed random values and the parameters structure p .
typedef unspecified-type param_type пакет параметров, которые при необходимости передаются в operator() и используются вместо хранимых параметров для создания возвращаемого значения. typedef unspecified-type param_type is the package of parameters optionally passed to operator() and is used in place of the stored parameters to generate its return value.
Конструктор const param& инициализирует сохраненные параметры на основе своего аргумента. A const param& constructor initializes the stored parameters from its argument.
param_type param() const получает сохраненные параметры. param_type param() const gets the stored parameters.
void param(const param_type&) задает сохраненные параметры на основе своего аргумента. void param(const param_type&) sets the stored parameters from its argument.
result_type min() возвращает минимальное значение, полученное от функции operator() распределения. result_type min() returns the minimum value that is returned by the distribution’s operator() .
result_type max() возвращает максимальное значение, полученное от функции operator() распределения. result_type max() returns the maximum value that is returned by the distribution’s operator() . Если result_type — это целочисленный тип, то max() — это максимальное значение, которое может быть возвращено (инклюзивное). Если result_type — это вещественное значение, то max() — это наименьшее значение, превышающее все значения, которые могут быть возвращены (неинклюзивное). When result_type is an integral (integer-valued) type, max() is the maximum value that can actually be returned (inclusive); when result_type is a floating-point (real-valued) type, max() is the smallest value greater than all values that can be returned (non-inclusive).
void reset() удаляет любые кэшированные значения, чтобы результат следующего вызова operator() не зависел от любых значений, полученных от механизма перед вызовом. void reset() discards any cached values, so that the result of the next call to operator() does not depend on any values obtained from the engine before the call.
Структура параметров — это объект, в котором хранятся все параметры, необходимые для распределения. A parameter structure is an object that stores all of the parameters needed for a distribution. Она содержит следующие виртуальные машины: It contains:
typedef distribution-type distribution_type , который является типом его распределения. typedef distribution-type distribution_type , which is the type of its distribution.
Один или несколько конструкторов, которые принимают такие же наборы параметров, что и конструкторы распределения. One or more constructors that take the same parameter lists as the distribution constructors take.
Такие же функции параметров и доступа, как у распределения. The same parameter-access functions as the distribution.
Операторы сравнения равенства и неравенства. Equality and inequality comparison operators.
Дополнительные сведения см. ниже в справочных подразделах, указанных ранее в этой статье. For more information, see the reference subtopics below this one, linked previously in this article.
Замечания Remarks
В Visual Studio есть два очень полезных РГСЧ — mt19937 и random_device , которые показаны в следующей таблице. There are two highly useful URNGs in Visual Studio— mt19937 and random_device —as shown in this comparison table:
РГСЧ URNG | быстрый; Fast | Криптобезопасный Crypto-secure | С начальным значением Seedable | Детерминированный Deterministic |
---|---|---|---|---|
mt19937 | Да Yes | Нет No | Да Yes | Да * Yes * |
random_device | Нет No | Да Yes | Нет No | Нет No |
* Если предоставлено известное начальное значение. * When provided with a known seed.
Хотя согласно стандарту ISO для C++ функция random_device не обязана быть криптографически безопасной, в Visual Studio она реализована как криптобезопасная. Although the ISO C++ Standard does not require random_device to be cryptographically secure, in Visual Studio it is implemented to be cryptographically secure. (Термин «криптографически безопасный» не подразумевает каких-то гарантий, но обозначает минимальный уровень энтропии, а значит, и уровень предсказуемости данного алгоритма рандомизации. (The term «cryptographically secure» does not imply guarantees, but refers to a minimum level of entropy—and therefore, the level of predictability—a given randomization algorithm provides. Дополнительные сведения см. в статье « криптографически защищенный генератор номеров псевдослучайное» статьи Википедии. Поскольку стандарт ISO C++ не требует этого, другие платформы могут реализовываться random_device как простой генератор случайных чисел (не защищен криптографически) и может быть пригоден только в качестве источника начального значения для другого генератора. For more information, see the Wikipedia article Cryptographically secure pseudorandom number generator.) Because the ISO C++ Standard does not require this, other platforms may implement random_device as a simple pseudo-random number generator (not cryptographically secure) and may only be suitable as a seed source for another generator. При использовании random_device в коде для разных платформ изучите документацию по этим платформам. Check the documentation for those platforms when using random_device in cross-platform code.
По определению, результаты random_device не воспроизводятся повторно; это значит, что эта функция может работать значительно медленнее, чем другие РГСЧ. By definition, random_device results are not reproducible, and a side-effect is that it may run significantly slower than other URNGs. Большинство приложений, которые не должны быть криптобезопасными, используют mt19937 или аналогичный механизм, хотя для заполнения начального значения можно вызвать random_device , как показано в примере кода. Most applications that are not required to be cryptographically secure use mt19937 or a similar engine, although you may want to seed it with a call to random_device , as shown in the code example.