diff options
author | Mike Buland <mike@xagasoft.com> | 2013-04-21 21:51:17 -0600 |
---|---|---|
committer | Mike Buland <mike@xagasoft.com> | 2013-04-21 21:51:17 -0600 |
commit | a520fc5740da7d50a289357e4e6e529b826454e7 (patch) | |
tree | b54cbe7d8e33e262e87697425f08b77446f75aa5 /src/number.cpp | |
parent | 7b87784eaf497a976b56be4fd169fb52c9bf7dea (diff) | |
download | clic-a520fc5740da7d50a289357e4e6e529b826454e7.tar.gz clic-a520fc5740da7d50a289357e4e6e529b826454e7.tar.bz2 clic-a520fc5740da7d50a289357e4e6e529b826454e7.tar.xz clic-a520fc5740da7d50a289357e4e6e529b826454e7.zip |
FIxed fractional support in comparisons.
They still don't handle mixed scale comparisons correctly, it shouldn't
be too hard to add, but yeah...not supported yet.
Diffstat (limited to 'src/number.cpp')
-rw-r--r-- | src/number.cpp | 46 |
1 files changed, 42 insertions, 4 deletions
diff --git a/src/number.cpp b/src/number.cpp index d16bd98..b7a420c 100644 --- a/src/number.cpp +++ b/src/number.cpp | |||
@@ -133,6 +133,11 @@ bool Number::operator==( const Number &rhs ) const | |||
133 | if( aInt[j] != rhs.aInt[j] ) | 133 | if( aInt[j] != rhs.aInt[j] ) |
134 | return false; | 134 | return false; |
135 | } | 135 | } |
136 | for( int j = 0; j < aFrac.getSize(); j++ ) | ||
137 | { | ||
138 | if( aFrac[j] != rhs.aFrac[j] ) | ||
139 | return false; | ||
140 | } | ||
136 | 141 | ||
137 | return true; | 142 | return true; |
138 | } | 143 | } |
@@ -164,6 +169,14 @@ bool Number::operator>( const Number &rhs ) const | |||
164 | else if( iDiff > 0 ) | 169 | else if( iDiff > 0 ) |
165 | return bPositive; | 170 | return bPositive; |
166 | } | 171 | } |
172 | for( int j = 0; j < iScale; j++ ) | ||
173 | { | ||
174 | int iDiff = aFrac[j] - rhs.aFrac[j]; | ||
175 | if( iDiff < 0 ) | ||
176 | return !bPositive; | ||
177 | else if( iDiff > 0 ) | ||
178 | return bPositive; | ||
179 | } | ||
167 | return false; | 180 | return false; |
168 | } | 181 | } |
169 | 182 | ||
@@ -189,6 +202,14 @@ bool Number::operator<( const Number &rhs ) const | |||
189 | else if( iDiff < 0 ) | 202 | else if( iDiff < 0 ) |
190 | return bPositive; | 203 | return bPositive; |
191 | } | 204 | } |
205 | for( int j = 0; j < iScale; j++ ) | ||
206 | { | ||
207 | int iDiff = aFrac[j] - rhs.aFrac[j]; | ||
208 | if( iDiff > 0 ) | ||
209 | return !bPositive; | ||
210 | else if( iDiff < 0 ) | ||
211 | return bPositive; | ||
212 | } | ||
192 | return false; | 213 | return false; |
193 | } | 214 | } |
194 | 215 | ||
@@ -214,6 +235,14 @@ bool Number::operator>=( const Number &rhs ) const | |||
214 | else if( iDiff > 0 ) | 235 | else if( iDiff > 0 ) |
215 | return bPositive; | 236 | return bPositive; |
216 | } | 237 | } |
238 | for( int j = 0; j < iScale; j++ ) | ||
239 | { | ||
240 | int iDiff = aFrac[j] - rhs.aFrac[j]; | ||
241 | if( iDiff < 0 ) | ||
242 | return !bPositive; | ||
243 | else if( iDiff > 0 ) | ||
244 | return bPositive; | ||
245 | } | ||
217 | return true; | 246 | return true; |
218 | } | 247 | } |
219 | 248 | ||
@@ -239,6 +268,14 @@ bool Number::operator<=( const Number &rhs ) const | |||
239 | else if( iDiff < 0 ) | 268 | else if( iDiff < 0 ) |
240 | return bPositive; | 269 | return bPositive; |
241 | } | 270 | } |
271 | for( int j = 0; j < iScale; j++ ) | ||
272 | { | ||
273 | int iDiff = aFrac[j] - rhs.aFrac[j]; | ||
274 | if( iDiff > 0 ) | ||
275 | return !bPositive; | ||
276 | else if( iDiff < 0 ) | ||
277 | return bPositive; | ||
278 | } | ||
242 | return true; | 279 | return true; |
243 | } | 280 | } |
244 | 281 | ||
@@ -518,14 +555,15 @@ void Number::setScale( int iNewScale ) | |||
518 | return; | 555 | return; |
519 | else if( iScale < iNewScale ) | 556 | else if( iScale < iNewScale ) |
520 | { | 557 | { |
521 | for(; iScale < iNewScale; iNewScale-- ) | 558 | while( aFrac.getSize() < iNewScale ) |
522 | aFrac.remove(); | 559 | aFrac.append(0); |
523 | } | 560 | } |
524 | else | 561 | else |
525 | { | 562 | { |
526 | for(; iScale > iNewScale; iNewScale++ ) | 563 | while( aFrac.getSize() > iNewScale ) |
527 | aFrac.append(0); | 564 | aFrac.remove(); |
528 | } | 565 | } |
566 | iScale = iNewScale; | ||
529 | } | 567 | } |
530 | 568 | ||
531 | Number Number::add( const Number &rhs, bool bSub ) const | 569 | Number Number::add( const Number &rhs, bool bSub ) const |