diff options
Diffstat (limited to '')
| -rw-r--r-- | src/main.cpp | 1 | ||||
| -rw-r--r-- | src/number.cpp | 33 | ||||
| -rw-r--r-- | src/packedintarray.cpp | 7 | ||||
| -rw-r--r-- | src/packedintarray.h | 1 |
4 files changed, 27 insertions, 15 deletions
diff --git a/src/main.cpp b/src/main.cpp index 0e5a77d..1499285 100644 --- a/src/main.cpp +++ b/src/main.cpp | |||
| @@ -281,6 +281,7 @@ void fractest() | |||
| 281 | Number a( 8 ), b( 8 ); | 281 | Number a( 8 ), b( 8 ); |
| 282 | 282 | ||
| 283 | a = "123.456"; | 283 | a = "123.456"; |
| 284 | println("%1").arg( a ); | ||
| 284 | b = "0.987"; | 285 | b = "0.987"; |
| 285 | println("%1 + %2 = %3").arg( a ).arg( b ).arg( a + b ); | 286 | println("%1 + %2 = %3").arg( a ).arg( b ).arg( a + b ); |
| 286 | } | 287 | } |
diff --git a/src/number.cpp b/src/number.cpp index 8ebe870..49e8a60 100644 --- a/src/number.cpp +++ b/src/number.cpp | |||
| @@ -9,8 +9,8 @@ Number::Number( int iScale, int iRadix ) : | |||
| 9 | iRadix( iRadix ), | 9 | iRadix( iRadix ), |
| 10 | iScale( iScale ), | 10 | iScale( iScale ), |
| 11 | bPositive( true ), | 11 | bPositive( true ), |
| 12 | aInt( RadixToBits(iRadix) ), | 12 | aInt( RadixToBits( iRadix ) ), |
| 13 | aFrac( RadixToBits(iRadix), iScale ) | 13 | aFrac( aInt.getBitWidth(), iScale ) |
| 14 | { | 14 | { |
| 15 | } | 15 | } |
| 16 | 16 | ||
| @@ -19,7 +19,7 @@ Number::Number( const Bu::String &sData, int iScale, int iRadix ) : | |||
| 19 | iScale( iScale ), | 19 | iScale( iScale ), |
| 20 | bPositive( true ), | 20 | bPositive( true ), |
| 21 | aInt( RadixToBits( iRadix ) ), | 21 | aInt( RadixToBits( iRadix ) ), |
| 22 | aFrac( RadixToBits(iRadix), iScale ) | 22 | aFrac( aInt.getBitWidth(), iScale ) |
| 23 | { | 23 | { |
| 24 | set( sData ); | 24 | set( sData ); |
| 25 | } | 25 | } |
| @@ -286,29 +286,38 @@ void Number::set( const Bu::String &sNum ) | |||
| 286 | void Number::set( const Number &sNum ) | 286 | void Number::set( const Number &sNum ) |
| 287 | { | 287 | { |
| 288 | aInt.set( sNum.aInt ); | 288 | aInt.set( sNum.aInt ); |
| 289 | aFrac.set( sNum.aFrac ); | ||
| 289 | bPositive = sNum.bPositive; | 290 | bPositive = sNum.bPositive; |
| 290 | iScale = sNum.iScale; | 291 | iScale = sNum.iScale; |
| 292 | iRadix = sNum.iRadix; | ||
| 291 | } | 293 | } |
| 292 | 294 | ||
| 293 | Bu::String Number::toString() const | 295 | Bu::String Number::toString() const |
| 294 | { | 296 | { |
| 295 | if( aInt.getSize() == 0 ) | 297 | int iSigDig = iScale-1; |
| 298 | for( ; iSigDig >= 0 && aFrac.get( iSigDig ) == 0; iSigDig-- ) { } | ||
| 299 | if( aInt.getSize() == 0 && iSigDig <= 0 ) | ||
| 296 | return "0"; | 300 | return "0"; |
| 297 | Bu::String sRet; | 301 | Bu::String sRet; |
| 298 | if( !bPositive ) | 302 | if( !bPositive ) |
| 299 | sRet += '-'; | 303 | sRet += '-'; |
| 300 | for( int j = aInt.getSize()-1; j >= 0; j-- ) | 304 | if( aInt.getSize() > 0 ) |
| 301 | { | 305 | { |
| 302 | int x = aInt.get( j ); | 306 | for( int j = aInt.getSize()-1; j >= 0; j-- ) |
| 303 | if( x >= 10 ) | 307 | { |
| 304 | sRet += x-10+'a'; | 308 | int x = aInt.get( j ); |
| 305 | else | 309 | if( x >= 10 ) |
| 306 | sRet += x+'0'; | 310 | sRet += x-10+'a'; |
| 311 | else | ||
| 312 | sRet += x+'0'; | ||
| 313 | } | ||
| 307 | } | 314 | } |
| 308 | if( iScale > 0 ) | 315 | else |
| 316 | sRet += "0"; | ||
| 317 | if( iSigDig >= 0 ) | ||
| 309 | { | 318 | { |
| 310 | sRet += '.'; | 319 | sRet += '.'; |
| 311 | for( int j = 0; j < iScale; j++ ) | 320 | for( int j = 0; j <= iSigDig; j++ ) |
| 312 | { | 321 | { |
| 313 | int x = aFrac.get( j ); | 322 | int x = aFrac.get( j ); |
| 314 | if( x >= 10 ) | 323 | if( x >= 10 ) |
diff --git a/src/packedintarray.cpp b/src/packedintarray.cpp index 0e137bf..badc829 100644 --- a/src/packedintarray.cpp +++ b/src/packedintarray.cpp | |||
| @@ -31,12 +31,13 @@ PackedIntArray::PackedIntArray( PackedIntArray::Unit iBitWidth ) : | |||
| 31 | PackedIntArray::PackedIntArray( PackedIntArray::Unit iBitWidth, int iCount ): | 31 | PackedIntArray::PackedIntArray( PackedIntArray::Unit iBitWidth, int iCount ): |
| 32 | iBitWidth( iBitWidth ), | 32 | iBitWidth( iBitWidth ), |
| 33 | aData( NULL ), | 33 | aData( NULL ), |
| 34 | iCapacity( StoreCount(iCount) ), | 34 | iCapacity( bitsizeof(StoreCount(iCount))/iBitWidth ), |
| 35 | iCount( iCount ), | 35 | iCount( iCount ), |
| 36 | uMask( 0 ) | 36 | uMask( 0 ) |
| 37 | { | 37 | { |
| 38 | aData = new Store[StoreCount(iCapacity)]; | 38 | int iSize = StoreCount(iCapacity); |
| 39 | memset( aData, 0, StoreCount(iCapacity)); | 39 | aData = new Store[iSize]; |
| 40 | memset( aData, 0, iSize*sizeof(Store)); | ||
| 40 | for( int j = 0; j < iBitWidth; j++ ) | 41 | for( int j = 0; j < iBitWidth; j++ ) |
| 41 | uMask |= (1<<j); | 42 | uMask |= (1<<j); |
| 42 | } | 43 | } |
diff --git a/src/packedintarray.h b/src/packedintarray.h index de26a6a..ec109e5 100644 --- a/src/packedintarray.h +++ b/src/packedintarray.h | |||
| @@ -22,6 +22,7 @@ public: | |||
| 22 | void set( const PackedIntArray &rSrc, int iStart, int iSize ); | 22 | void set( const PackedIntArray &rSrc, int iStart, int iSize ); |
| 23 | void set( const PackedIntArray &rSrc ); | 23 | void set( const PackedIntArray &rSrc ); |
| 24 | void trim(); | 24 | void trim(); |
| 25 | int getBitWidth() const { return iBitWidth; } | ||
| 25 | 26 | ||
| 26 | Bu::String toBitString() const; | 27 | Bu::String toBitString() const; |
| 27 | Bu::String toString() const; | 28 | Bu::String toString() const; |
