Namespaces
Variants

C++ named requirements: RandomNumberEngine (since C++11)

From cppreference.net
C++ named requirements

난수 엔진은 부호 없는 정수 값을 반환하는 함수 객체로, 가능한 결과 범위 내의 각 값이 (이상적으로) 동일한 확률을 가지도록 합니다.

임의의 난수 엔진은 또한 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. getloc ( ) == pr. getloc ( ) true 입니다.
  • std:: is_same < decltype ( is ) :: char_type ,
    decltype ( pr ) :: char_type > :: value
    true 입니다.
  • std:: is_same < decltype ( is ) :: traits_type ,
    decltype ( pr ) :: traits_type > :: value
    true 입니다.

사후 조건: is 의 fmtflags는 이전과 동일합니다.

O(n)

표준 라이브러리

다음 표준 라이브러리 기능들은 RandomNumberEngine 를 만족합니다:

선형 합동 알고리즘을 구현함
(클래스 템플릿)
메르센 트위스터 알고리즘을 구현함
(클래스 템플릿)
빼기-캐리( 지연 피보나치 ) 알고리즘을 구현함
(클래스 템플릿)
카운터 기반 병렬화 가능 생성기
(클래스 템플릿)
난수 엔진의 일부 출력을 버림
(클래스 템플릿)
난수 엔진의 출력을 지정된 비트 수의 블록으로 묶음
(클래스 템플릿)
난수 엔진의 출력을 다른 순서로 전달함
(클래스 템플릿)

다음 표준 라이브러리 기능들은 UniformRandomBitGenerator 를 만족하지만 RandomNumberEngine 는 만족하지 않습니다:

하드웨어 엔트로피 소스를 사용하는 비결정적 난수 생성기
(클래스)