C++ named requirements: RandomNumberEngine (since C++11)
난수 엔진은 부호 없는 정수 값을 반환하는 함수 객체로, 가능한 결과 범위 내의 각 값이 (이상적으로) 동일한 확률을 가지도록 합니다.
임의의 난수 엔진은 또한 UniformRandomBitGenerator 이므로, 임의의 난수 분포 에 연결되어 난수(형식적으로는 난수 변량)를 얻는 데 사용될 수 있습니다.
요구사항
타입은 다음 조건을 만족할 경우 RandomNumberEngine 요구 사항을 충족합니다: UniformRandomBitGenerator 요구 사항을 만족하고, 아래 주어진 타입과 값들이 아래 표의 의미론적 요구 사항과 복잡도 요구 사항을 충족하는 경우:
| 타입 | 정의 |
E
|
RandomNumberEngine 타입 |
T
|
E::result_type
|
| 값 | 정의 |
| e |
E
타입의 값
|
| v |
E
타입의 lvalue
|
| x , y |
(const 한정이 가능한)
E
타입의 값들
|
| s |
T
타입의 값
|
| q | SeedSequence lvalue |
| z | unsigned long long 타입의 값 |
| os | std::basic_ostream 특수화 타입의 lvalue |
| is | std::basic_istream 특수화 타입의 lvalue |
| n |
E
의 상태
크기
|
| TA |
E
의
전이 알고리즘
|
| GA |
E
의
생성 알고리즘
|
| 표현식 | 반환 타입 | 의미론 | 복잡도 |
|---|---|---|---|
| E ( ) | N/A |
동일한 타입
E
의 다른 모든 기본 생성된 엔진들과 동일한 초기 상태를 가진 엔진을 생성합니다.
|
O(n) |
| E ( x ) | x 와 동일하게 비교되는 엔진을 생성합니다. | O(n) | |
| E ( s ) | s 에 의해 초기 상태가 결정되는 엔진을 생성합니다. | O(n) | |
| E ( q ) |
초기 상태가 단일
q.generate
호출에 의해 결정되는 엔진을 생성합니다.
|
길이가
n
인 시퀀스에 대해 호출된
q.generate
의 복잡도와 동일
|
|
| e. seed ( ) | void | 사후 조건: e == E ( ) . | E ( ) 와 동일 |
| e. seed ( s ) | void | 사후 조건: e == E ( s ) . | E ( s ) 와 동일 |
| e. seed ( q ) | void | 사후 조건: e == E ( q ) . | E ( q ) 와 동일 |
| e ( ) |
T
|
e
의 상태를
e
i
에서
e
i+1
로 진행시키고 (즉,
TA
(
e
i
)
)
GA
(
e
i
)
를 반환합니다.
|
분할 상환 상수 시간 |
| e. discard ( z ) | void |
e
의 상태를
e
i
에서
e
i+z
로 진전시킵니다. 이는
e
(
)
를
z
회 연속 호출하는 것과 동등한 방법으로 수행됩니다.
|
e ( ) 를 z 회 연속 호출하는 복잡도보다 나쁘지 않음 |
| x == y | bool | 모든 양의 정수 i 에 대해, x ( ) 와 y ( ) 의 i번째 연속 호출이 동일한 값을 반환하면 true 를 반환합니다. 그렇지 않으면 false 를 반환합니다. | O(n) |
| x ! = y | bool | ! ( x == y ) | O(n) |
| os << x | decltype ( os ) & |
fmtflags가
std::
ios_base
::
dec
|
std::
ios_base
::
left
로 설정되고 채움 문자가 공백 문자로 설정된 상태에서,
os
에
x
의 현재 상태를 텍스트 표현으로 기록합니다.
사후 조건: os 의 fmtflags와 채움 문자는 이전과 동일합니다. |
O(n) |
| is >> v | decltype ( is ) & |
fmtflags가
std::
ios_base
::
dec
로 설정된 상태에서,
is
로부터
v
의 현재 상태에 대한 텍스트 표현을 읽습니다. 잘못된 입력이 발생하면,
v
의 상태가 이 연산으로 인해 변경되지 않도록 보장하고
is.
setstate
(
std::
ios_base
::
failbit
)
를 호출합니다(이는
std::ios_base::failure
를 던질 수 있습니다).
사전 조건: is 는 이전에 다음 모든 조건을 만족하는 출력 스트림 pr 을 사용하여 작성된 텍스트 표현을 제공합니다:
사후 조건: is 의 fmtflags는 이전과 동일합니다. |
O(n) |
표준 라이브러리
다음 표준 라이브러리 기능들은 RandomNumberEngine 를 만족합니다:
|
(C++11)
|
선형 합동
알고리즘을 구현함
(클래스 템플릿) |
|
(C++11)
|
메르센 트위스터
알고리즘을 구현함
(클래스 템플릿) |
|
(C++11)
|
빼기-캐리(
지연 피보나치
) 알고리즘을 구현함
(클래스 템플릿) |
|
(C++26)
|
카운터 기반 병렬화 가능 생성기
(클래스 템플릿) |
|
(C++11)
|
난수 엔진의 일부 출력을 버림
(클래스 템플릿) |
|
(C++11)
|
난수 엔진의 출력을 지정된 비트 수의 블록으로 묶음
(클래스 템플릿) |
|
(C++11)
|
난수 엔진의 출력을 다른 순서로 전달함
(클래스 템플릿) |
다음 표준 라이브러리 기능들은 UniformRandomBitGenerator 를 만족하지만 RandomNumberEngine 는 만족하지 않습니다:
|
(C++11)
|
하드웨어 엔트로피 소스를 사용하는 비결정적 난수 생성기
(클래스) |