Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

Park-Miller 난수 생성 알고리즘을 구현하는 C++ 프로그램

<시간/>

Park-Miller 난수 생성 알고리즘은 난수를 생성하는 또 다른 방법입니다.

이 유형의 난수 생성기(RNG)의 일반 공식은 다음과 같습니다. X_{k+1} =g X(k) mod n

계수 n이 소수 또는 소수의 거듭제곱인 경우 승수 ​​g는 고승법 계수 n의 요소이고 시드 X0은 n에 대해 공소입니다.

알고리즘

시작 변수 n, a, b, c 및 seed 선언 변수 n, a, b, c 및 seed 읽기 Uniform() 변수 hi, lo, t 선언 hi=seed를 b로 나눈 값 lo =seed - b * hi t =a * lo - c * hi if (t> 0) 시드 =t; 그렇지 않으면 시드 =t + n; 반환 종자; Done For i =0 ~ n random DoneEnd 함수 호출

예시 코드

#include 이름 공간 사용 std;const long n =2145678965L;const long a =763214L;const long b =88844L;const long c =7766L; istatic 긴 시드 =12345678L; 이중 uniform() { 긴 hi =시드 / b; 긴 lo =시드 - b * hi; 긴 t =a * lo - c * hi; if (t> 0) 시드 =t; 그렇지 않으면 시드 =t + n; 반환 시드;}int main(int argc, char **argv) { 더블 A[10]; for (int i =0; i <10; i++) A[i] =uniform(); cout <<"임의의 숫자는:\n"; for (int i =0; i <10; i++) cout < 

출력

난수:6.50293e+104.27187e+102.1539e+104.62058e+101.70792e+108.24569e+095.93381e+103.63839e+103.6319e+8.