SedSat3 1.1.6
Sediment Source Apportionment Tool - Advanced statistical methods for environmental pollution research
Loading...
Searching...
No Matches
Binary.cpp
Go to the documentation of this file.
1// Binary.cpp: implementation of the CBinary class.
2//
4
5#include "Binary.h"
6#include "math.h"
7#include <iostream>
8#include "GADistribution.h"
9#ifdef QT_version
10#include "qdebug.h"
11#endif // QT_version
12
13//using namespace std;
14
16// Construction/Destruction
18
20{
21 nDigits = 0;
22 precision = 3;
23 Digit.resize(nDigits);
24 sign = true;
25
26}
27
29{
30 nDigits = n;
31 precision = 3;
32 Digit.resize(nDigits);
33 sign = true;
34
35}
36
37CBinary::CBinary(int n, int preci)
38{
39 nDigits = n;
40 precision = preci;
41 Digit.resize(nDigits);
42 sign = true;
43
44}
45
47{
48
49}
50
52{
53 nDigits = B.nDigits;
55 Digit.resize(nDigits);
56 Digit = B.Digit;
57 sign = B.sign;
58}
59
61{
62 nDigits = B.nDigits;
64 Digit.resize(nDigits);
65 Digit = B.Digit;
66
67 sign = B.sign;
68 return *this;
69}
70
71
72double CBinary::decode(double minrange)
73{
74
75 double sum=0;
76 for (int i=nDigits-1; i>=0; i--)
77 {
78 if (Digit[i] == true)
79 sum += pow(2.0,nDigits-i-1);
80 }
81
82 return sum/pow(10.0,precision) + minrange;
83}
84
85
86CBinary code(double x, double minrange, double maxrange, int precision)
87{
88 int n = static_cast<int>(log((maxrange-minrange)*pow(10.0,precision))/log(2.0)+1);
89 int xi = static_cast<int>((x-minrange)*pow(10.0,precision));
90 CBinary B(n);
91 B.precision = precision;
92
93 for (int i=0; i<n; i++)
94 {
95 if (xi%2 == 1)
96 B.Digit[B.nDigits - i-1] = true;
97 else
98 B.Digit[B.nDigits - i-1] = false;
99 xi = static_cast<int>(xi/2);
100 }
101
102 return B;
103}
104
106{
107 int n = nDigits + B1.nDigits;
108 CBinary B(n);
109 for (int i=0; i<n; i++)
110 {
111 if (i<nDigits)
112 B.Digit[i] = Digit[i];
113 else
114 B.Digit[i] = B1.Digit[i-nDigits];
115 }
116
117 return B;
118}
119
120CBinary CBinary::extract(int spoint, int epoint)
121{
122 int n = epoint - spoint + 1;
123 CBinary B(n);
124 for (int i=0; i<n; i++)
125 {
126 B.Digit[i] = Digit[i+spoint];
127 }
128
129 return B;
130
131}
132
133int& CBinary::operator[](unsigned int i)
134{
135 int *p = 0;
136 if (i<Digit.size())
137 return this->Digit[i];
138 else
139 return *p;
140}
141
142void cross(CBinary &B1, CBinary &B2, int p)
143{
144 CBinary BT1 = B1;
145 CBinary BT2 = B2;
146 for (int i=0; i<B1.nDigits; i++)
147 {
148 if (i < p)
149 {
150 B1[i] = BT1[i];
151 B2[i] = BT2[i];
152 }
153 else
154 {
155 B1[i] = BT2[i];
156 B2[i] = BT1[i];
157 }
158 }
159
160}
161
162void cross(CBinary &B1, CBinary &B2, std::vector<int> p)
163{
164 CBinary BT1 = B1;
165 CBinary BT2 = B2;
166 for (int i=0; i<B1.nDigits; i++)
167 {
168 for (unsigned int j=1; j<p.size(); j++)
169 if (p[j-1]< i && i < p[j])
170 {
171 if (i%2==0)
172 {
174
175 B1[i] = BT1[i];
176 B2[i] = BT2[i];
177 }
178 else
179 {
180 B1[i] = BT2[i];
181 B2[i] = BT1[i];
182 }
183 }
184 }
185}
186
187
188
189
190void cross2p(CBinary &B1, CBinary &B2, int p1, int p2)
191{
192 CBinary BT1 = B1;
193 CBinary BT2 = B2;
194 for (int i=0; i<B1.nDigits; i++)
195 {
196 if (i < p1)
197 {
198 B1[i] = BT1[i];
199 B2[i] = BT2[i];
200 }
201 if ((i >= p1) && (i < p2))
202 {
203 B1[i] = BT2[i];
204 B2[i] = BT1[i];
205 }
206 if ( i >= p2)
207 {
208 B1[i] = BT1[i];
209 B2[i] = BT2[i];
210 }
211
212 }
213
214}
215
217{
218 for (int i=0; i<nDigits; i++)
219 std::cout<<Digit[i];
220 std::cout<<std::endl;
221
222
223}
224
225void CBinary::mutate(double mu)
226{
227 for (int i=0; i<nDigits; i++)
228 if (GADistribution::GetRndUniF(0,1)<mu)
229 Digit[i] = !Digit[i];
230
231
232}
void cross2p(CBinary &B1, CBinary &B2, int p1, int p2)
Definition Binary.cpp:190
void cross(CBinary &B1, CBinary &B2, int p)
Definition Binary.cpp:142
CBinary code(double x, double minrange, double maxrange, int precision)
Definition Binary.cpp:86
void mutate(double mu)
Definition Binary.cpp:225
CBinary extract(int spoint, int epoint)
Definition Binary.cpp:120
CBinary operator+(const CBinary &B)
Definition Binary.cpp:105
std::vector< int > Digit
Definition Binary.h:15
CBinary operator=(const CBinary &B)
Definition Binary.cpp:60
void show()
Definition Binary.cpp:216
int & operator[](unsigned int i)
Definition Binary.cpp:133
CBinary()
Definition Binary.cpp:19
virtual ~CBinary()
Definition Binary.cpp:46
int precision
Definition Binary.h:16
bool sign
Definition Binary.h:24
int nDigits
Definition Binary.h:14
double decode(double minrange)
Definition Binary.cpp:72
static double GetRndUniF(double xmin, double xmax)