C언어 - int형의 정규분포를 취하는 난수 값 생성 및 배열에 저장하기 소스 코드




아래의 소스코드는 C언어에서 int 형 데이터의 정규분포를 취하는 난수 값을 생성 및 배열에 저장하는 소스코드입니다.


참조 : http://mwultong.blogspot.com/2006/10/c-gaussian-gaussian-random-numbers.html


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
#include <Windows.h>
 
#define N 1000 //The number of data
#define RANGE 100000 //The range of data
 
double gaussianRandom(void);
 
void main(void) {
    srand(time(NULL));
    int Arr[N];
    for (int i = 0; i < N; i++) {
        Arr[i] = (int)((gaussianRandom() + 3.0* RANGE);
    }
}
 
double gaussianRandom(void) {
    static double V1, V2, S;
    static int phase = 0;
    double X;
    if (phase == 0) {
        do {
            double U1 = (double)rand() / RAND_MAX;
            double U2 = (double)rand() / RAND_MAX;
            V1 = 2 * U1 - 1;
            V2 = 2 * U2 - 1;
            S = V1 * V1 + V2 * V2;
        } while (S >= 1 || S == 0);
        X = V1 * sqrt(-2 * log(S) / S);
    }
    else X = V2 * sqrt(-2 * log(S) / S);
    phase = 1 - phase;
    return X;
}
cs