아래의 소스코드는 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 |
'컴퓨터 공학 > C++' 카테고리의 다른 글
C언어 - rand()를 이용한 난수 생성 (0) | 2018.09.12 |
---|---|
데이터의 분포를 출력하는 소스 코드 (C언어) (0) | 2017.06.02 |
[C/C++] C++과 SQLite 연동하기 (0) | 2016.02.29 |
C언어로 파워볼 당첨 시뮬레이터 만들기 (0) | 2016.01.14 |
[C언어]파일 입출력 - 사용자 추가, 수정, 검색, 출력하기 (1) | 2015.12.07 |