C/C에서 정규 분포를 사용하여 난수 생성
정규 분포에 따라 난수를 생성해야 하는 필요성은 다양한 프로그래밍 응용 프로그램에서 자주 발생합니다. . C/C에는 이를 달성하기 위해 사용할 수 있는 몇 가지 기술이 있습니다.
널리 채택되는 접근 방식 중 하나는 Box-Muller 변환입니다. 이 방법에는 두 개의 독립적인 균일 난수를 생성하고 정규 분포 값을 얻기 위해 수학 공식을 사용하여 변환하는 작업이 포함됩니다. Box-Muller 변환은 수학적으로 엄격하며 정확한 결과를 생성합니다.
C/C에서 Box-Muller 변환을 구현하는 방법은 다음과 같습니다.
#include <random> #include <cmath> // Generate a random number following a Gaussian distribution double normal_rand() { static double z1; static bool ready = false; // If z1 is not ready, generate two uniform random numbers if (!ready) { double u1 = std::uniform_real_distribution<double>(0, 1)(); double u2 = std::uniform_real_distribution<double>(0, 1)(); z1 = std::sqrt(-2 * std::log(u1)) * std::cos(2 * M_PI * u2); ready = true; } // Return z1 and mark it as used ready = false; return z1; }
위 예에서 std:: uniform_real_distribution은 균일한 난수를 생성하는 반면 std::sqrt 및 std::cos는 필요한 수학적 작업을 수행합니다.
Box-Muller 변환을 활용하면 C/C에서 정규 분포에 따라 난수를 생성하는 간단하고 안정적인 방법을 제공합니다. 이 기술을 사용하면 프로그래머는 Boost와 같은 외부 라이브러리를 사용하지 않고 표준 C 라이브러리의 기능을 활용할 수 있습니다.
위 내용은 C/C에서 정규 분포 난수를 생성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!