-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathGauss.cpp
More file actions
161 lines (135 loc) · 7.37 KB
/
Copy pathGauss.cpp
File metadata and controls
161 lines (135 loc) · 7.37 KB
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
//**************************************************************//
// Engenharia Inform疸ica - Programa鈬o Orientada a Objetos //
// Trabalho Pr疸ico Final - Cria鈬o de Histogramas //
// Data- 01/12/2015 //
// Docente - S駻gio Correia //
// Frederico Balc縊 - 15307 //
// Jo縊 Cunha - 17210 //
//**************************************************************//
#include <cstdlib>
#include <cmath>
#include <limits>
#include "stdio.h"
#include "stdlib.h"
#include "math.h"
#include "time.h"
#include "Gauss.h"
#define PI 3.14159265358979323846 //definido o PI para c疝culo da distribui鈬o Normal
/*-----------------------------------------------*/
/* Construtor Gauss da Classe Gauss por default */
/* Recebe como par穃etros: Nenhum */
/*-----------------------------------------------*/
Gauss::Gauss()
{
srand((unsigned int)time(NULL)); //fun鈬o srand para utilizar rand(), RAND_MAX
_media = 120;
_desviopadrao = 10;
_intI = 100; //intervalo inferior
_intS = 200; //intervalo superior
}
/*-----------------------------------------------*/
/* Destrutor Gauss da Classe Gauss */
/* Recebe como par穃etros: Nenhum */
/*-----------------------------------------------*/
Gauss::~Gauss()
{
}
/*-------------------------------------------------------------------------------*/
/* M騁odo Gauss da Classe Gauss */
/* Recebe como par穃etros: media, desvio padrao, intervalo inferior e superior */
/*-------------------------------------------------------------------------------*/
Gauss::Gauss(float media, float desvio_padrao, float inter_inf, float inter_sup) {
_media = media;
_desviopadrao = desvio_padrao;
_intS = inter_sup;
_intI = inter_inf;
printf("Passei pelo construtor com inicializacao\n");
}
/*-------------------------------------------------------------------------------------------------------*/
/* M騁odo setM da Classe Gauss que atribui ・constante privada _media o valor de M que recebe do metodo */
/* Recebe como par穃etros: M (a media dada pelo utilizador) */
/*-------------------------------------------------------------------------------------------------------*/
void Gauss::setM(float M) {
_media = M;
}
/*-------------------------------------------------------------------------------------------------------*/
/* M騁odo getM da Classe Gauss que retorna o valor da media */
/* Recebe como par穃etros: Nenhum */
/*-------------------------------------------------------------------------------------------------------*/
float Gauss::getM() {
return _media;
}
/*-------------------------------------------------------------------------------------------------------------*/
/* M騁odo setM da Classe Gauss atribui ・constante privada _desviopadrao o valor de DesvP que recebe do metodo */
/* Recebe como par穃etros: DesvP (valor do desvio padrao) */
/*-------------------------------------------------------------------------------------------------------------*/
void Gauss::setDP(float DesvP) {
_desviopadrao = DesvP;
}
/*-------------------------------------------------------------------------------------------------------*/
/* M騁odo getDP da Classe Gauss que retorna o valor do desvio padrao */
/* Recebe como par穃etros: Nenhum */
/*-------------------------------------------------------------------------------------------------------*/
float Gauss::getDP() {
return _desviopadrao;
}
/*-------------------------------------------------------------------------------------------------------*/
/* M騁odo getIntSup da Classe Gauss que retorna o valor do intervalo superior */
/* Recebe como par穃etros: Nenhum */
/*-------------------------------------------------------------------------------------------------------*/
float Gauss::getIntSup() {
return _intS;
}
/*-------------------------------------------------------------------------------------------------------*/
/* M騁odo getIntInf da Classe Gauss que retorna o valor do intervalo inferior */
/* Recebe como par穃etros: Nenhum */
/*-------------------------------------------------------------------------------------------------------*/
float Gauss::getIntInf() {
return _intI;
}
/*-------------------------------------------------------------------------------------------------------------*/
/* M騁odo setIntSup da Classe Gauss que atribui ・constante privada _intS o valor de IS que recebe do metodo */
/* Recebe como par穃etros: IS ( intervalo superior ) */
/*-------------------------------------------------------------------------------------------------------------*/
void Gauss::setIntSup(float IS) {
_intS = IS;
}
/*-------------------------------------------------------------------------------------------------------------*/
/* M騁odo setIntSup da Classe Gauss que atribui ・constante privada _intI o valor de IF que recebe do metodo */
/* Recebe como par穃etros: IF ( intervalo inferior ) */
/*-------------------------------------------------------------------------------------------------------------*/
void Gauss::setIntInf(float IF) {
_intI = IF;
}
/*------------------------------------------------------------------------------------------------------------------*/
/* M騁odo getValue da Classe Gauss retorna um valor de um numero aleatio dentro do intervalo dado pelo utilizador */
/* Recebe como par穃etros: Nenhum */
/*------------------------------------------------------------------------------------------------------------------*/
double Gauss::getValue(double mu, double sigma)
{
const double epsilon = std::numeric_limits<double>::min();
const double two_pi = 2.0*PI;
static double z0, z1;
static bool generate;
generate = !generate;
if (!generate)
return z1 * sigma + mu;
double u1, u2;
do
{
u1 = rand() * (1.0 / RAND_MAX);
u2 = rand() * (1.0 / RAND_MAX);
} while (u1 <= epsilon);
z0 = sqrt(-2.0 * log(u1)) * cos(two_pi * u2);
z1 = sqrt(-2.0 * log(u1)) * sin(two_pi * u2);
return z0 * sigma + mu;
}
/*------------------------------------------------------------------------------------------------------------------*/
/* M騁odo Normal da Classe Gauss retorna um valor de um numero aleatio aplicado pela formula de Gauss */
/* Recebe como par穃etros: X (valor do tipo float) */
/*------------------------------------------------------------------------------------------------------------------*/
double Gauss::Normal(double X) {
double temp;
temp = 1 / sqrt(2 * PI*pow(_desviopadrao, 2))*exp(-(pow((X - _media), 2)) / (2 * pow(_desviopadrao, 2)));
return temp;
}