random_gamma_distribution
random_gamma_distribution (감마 분포)
std::gamma_distribution은 확률 밀도 함수에 따라 분포된 임의의 양의 부동소수점 값 x를 생성하는 분포 클래스예요. C++11부터 사용할 수 있어요.
출처: cppreference
본문
<random> 헤더에 정의되어 있고, 시그니처는 다음과 같아요.
template< class RealType = double >
class gamma_distribution;
(since C++11)
확률 밀도 함수에 따라 분포된 임의의 양의 부동소수점 값 x를 생성해요:
P(x|α, β) = e^(-x/β) / (β^α · Γ(α)) · x^(α-1)
여기서 α는 형상(shape) 매개변수, β는 척도(scale) 매개변수라고 불러요. 형상 매개변수는 때때로 k, 척도 매개변수는 때때로 θ로 표기하기도 해요.
부동소수점 α에 대해 얻은 값은 각각 평균이 β인 α개의 독립적인 지수 분포 난수의 합이에요.
std::gamma_distribution은 RandomNumberDistribution을 만족해요.
템플릿 매개변수 (Template parameters)
- RealType — 결과 타입. float, double, long double 중 하나가 아니면 효과는 정의되지 않아요.
멤버 타입 (Member types)
| 멤버 타입 | 정의 |
|---|---|
| result_type (C++11) | RealType |
| param_type | 매개변수 집합의 타입 |
멤버 함수 (Member functions)
- (constructor) — 새 분포 생성
- reset — 내부 상태 재설정
- 생성: operator() — 다음 난수 생성
- 특성: alpha, beta — 분포 매개변수 반환; 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());
std::gamma_distribution<> d(2.0, 1.0); // α=2, β=1
std::map<int, int> hist;
for (int n = 0; n != 10000; ++n)
++hist[std::round(d(gen))];
for (auto [x, count] : hist)
if (x < 15)
std::cout << x << ": " << std::string(count / 200, '*') << '\n';
}