random_piecewise_constant_distribution
random_piecewise_constant_distribution (구간별 상수 분포)
std::piecewise_constant_distribution은 여러 하위 구간 [bᵢ, bᵢ₊₁) 각각에 균등하게 분포된 임의의 부동소수점 수를 생성하는 분포 클래스예요. C++11부터 사용할 수 있어요.
출처: cppreference
본문
<random> 헤더에 정의되어 있고, 시그니처는 다음과 같아요.
template< class RealType = double >
class piecewise_constant_distribution;
(since C++11)
std::piecewise_constant_distribution은 여러 하위 구간 [bᵢ, bᵢ₊₁) 각각에 균등하게 분포된 여러 임의의 부동소수점 수를 생성해요. 각 구간은 자신만의 가중치 wᵢ를 가져요. 구간 경계 집합과 가중치 집합이 이 분포의 매개변수예요.
임의의 bᵢ ≤ x < bᵢ₊₁에 대한 확률 밀도는 wᵢ/S(bᵢ₊₁ - bᵢ)이에요. 여기서 S는 모든 가중치의 합이에요.
std::piecewise_constant_distribution은 RandomNumberDistribution의 모든 요구사항을 만족해요.
템플릿 매개변수 (Template parameters)
- RealType — 결과 타입. float, double, long double 중 하나가 아니면 효과는 정의되지 않아요.
멤버 타입 (Member types)
| 멤버 타입 | 정의 |
|---|---|
| result_type (C++11) | RealType |
| param_type | 매개변수 집합의 타입 |
멤버 함수 (Member functions)
- (constructor) — 새 분포 생성
- reset — 내부 상태 재설정
- 생성: operator() — 다음 난수 생성
- 특성: intervals, densities — 분포 매개변수 반환; param — 매개변수 객체 얻기/설정; min — 최솟값; max — 최댓값
비멤버 함수 (Non-member functions)
- operator== operator!= — 두 분포 객체 비교
- operator<< operator>> (C++11) — 스트림 입출력
예제 (Example)
이 코드를 실행해 봐요.
#include <iostream>
#include <map>
#include <random>
int main()
{
std::random_device rd;
std::mt19937 gen(rd());
// 구간 {0,1,2,3}, 가중치 {1,2,1}
std::piecewise_constant_distribution<> d(std::initializer_list<double>{0,1,2,3},
std::initializer_list<double>{1,2,1});
std::map<int, int> hist;
for (int n = 0; n != 10000; ++n)
++hist[std::round(d(gen))];
for (auto [x, count] : hist)
std::cout << x << ": " << count << '\n';
}