질문:
난수를 쉽게 생성하는 방법 Boost를 사용하지 않고 C 또는 C에서 정규 분포를 따릅니다. 라이브러리?
답변:
Box-Muller 변환
Box-Muller 변환은 라이브러리 생성에 널리 사용되는 방법입니다. 균일 난수 생성기의 정규 분포 숫자입니다. 가우스 분포를 정확하게 준수하는 값을 생성합니다.
Box-Muller 변환의 수학 공식은 다음과 같습니다.
x = sqrt(-2 * log(U1)) * cos(2 * π * U2) y = sqrt(-2 * log(U1)) * sin(2 * π * U2)
여기서:
구현:
C/C에서 Box-Muller 변환을 구현하려면 다음을 사용할 수 있습니다. 코드:
#include <cmath> #include <random> double box_muller() { std::random_device rd; // Seed the random number generator with a system clock seed std::default_random_engine rng(rd()); std::uniform_real_distribution<double> dist(0.0, 1.0); double U1 = dist(rng); double U2 = dist(rng); double x = sqrt(-2 * log(U1)) * cos(2 * M_PI * U2); return x; }
사용법:
정규 분포 난수를 생성하려면 간단히 box_muller() 함수를 호출하세요.
double random_number = box_muller();
Random_number의 값은 평균이 0이고 표준편차가 있는 가우스 분포 확률 변수입니다. 1.
참고:
위 내용은 부스트 없이 C/C에서 정규 분포 난수를 생성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!