C/C에서 정규분포 난수 생성
C 또는 C에서 정규분포를 따르는 난수 생성이 자주 발생하는 작업 다양한 계산 및 통계 응용 프로그램에서. 이는 두 개의 균일한 난수를 활용하여 한 쌍의 정규 분포 숫자를 생성하는 널리 사용되는 기술인 Box-Muller 변환을 사용하여 효과적으로 달성할 수 있습니다.
Box-Muller 변환은 간단한 수학 공식을 사용합니다.
x = sqrt(-2 * ln(u1)) * cos(2 * pi * u2) y = sqrt(-2 * ln(u1)) * sin(2 * pi * u2)
여기서 u1과 u2는 [0, 1] 범위에서 생성된 두 개의 독립적인 균일 난수입니다. 이 두 방정식은 평균과 단위 분산이 0인 정규 분포를 따르는 두 개의 독립 확률 변수 x와 y를 정의합니다.
C/C에서 이 방법을 구현하려면 다음 단계를 수행할 수 있습니다.
double rand0to1() { return rand() / (RAND_MAX + 1.0); }
pair<double, double> box_muller() { double u1 = rand0to1(); double u2 = rand0to1(); double x = sqrt(-2.0 * log(u1)) * cos(2.0 * M_PI * u2); double y = sqrt(-2.0 * log(u1)) * sin(2.0 * M_PI * u2); return {x, y}; }
이 방법은 효과적으로 외부 라이브러리 없이도 정규 분포를 따르는 난수를 생성합니다.
위 내용은 Box-Muller 변환을 사용하여 C/C에서 정규 분포 난수를 생성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!