From a163095ac5405370d4f2473850e55f5f74da239a Mon Sep 17 00:00:00 2001 From: Josh Koon <45607479+joshkoon@users.noreply.github.com> Date: Thu, 21 Feb 2019 10:00:30 -0800 Subject: [PATCH] Revert Rational default base to 64 and uncomment code to convert to/from strings in intrat/fracrat, to resolve rounding errors. --- src/CalcManager/Header Files/Rational.h | 2 +- src/CalcManager/Ratpack/rat.cpp | 18 +++++++++--------- src/CalcManager/Ratpack/support.cpp | 12 ++++++------ 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/CalcManager/Header Files/Rational.h b/src/CalcManager/Header Files/Rational.h index 9c110c00..2c552d06 100644 --- a/src/CalcManager/Header Files/Rational.h +++ b/src/CalcManager/Header Files/Rational.h @@ -9,7 +9,7 @@ namespace CalcEngine // Default Base/Radix to use for Rational calculations // Defaults to base 64 rather than the RatPack-internal BASEX because many // calculations do not support bases > 64. - static constexpr uint32_t DEFAULT_BASE = BASEX; + static constexpr uint32_t DEFAULT_BASE = 64; class Rational { diff --git a/src/CalcManager/Ratpack/rat.cpp b/src/CalcManager/Ratpack/rat.cpp index 7ac0d7b4..ee294dc6 100644 --- a/src/CalcManager/Ratpack/rat.cpp +++ b/src/CalcManager/Ratpack/rat.cpp @@ -75,15 +75,15 @@ void fracrat( PRAT *pa , uint32_t radix, int32_t precision) { // Only do the intrat operation if number is nonzero. // and only if the bottom part is not one. - //if ( !zernum( (*pa)->pp ) && !equnum( (*pa)->pq, num_one ) ) - //{ - // wstring ratStr = RatToString(*pa, FMT_FLOAT, radix, precision); - // PNUMBER pnum = StringToNumber(ratStr, radix, precision); - // - // destroyrat( *pa ); - // *pa = numtorat( pnum, radix); - // destroynum( pnum ); - //} + if ( !zernum( (*pa)->pp ) && !equnum( (*pa)->pq, num_one ) ) + { + wstring ratStr = RatToString(*pa, FMT_FLOAT, radix, precision); + PNUMBER pnum = StringToNumber(ratStr, radix, precision); + + destroyrat( *pa ); + *pa = numtorat( pnum, radix); + destroynum( pnum ); + } remnum( &((*pa)->pp), (*pa)->pq, BASEX ); diff --git a/src/CalcManager/Ratpack/support.cpp b/src/CalcManager/Ratpack/support.cpp index 38a0add9..81e17ec0 100644 --- a/src/CalcManager/Ratpack/support.cpp +++ b/src/CalcManager/Ratpack/support.cpp @@ -291,12 +291,12 @@ void intrat( PRAT *px, uint32_t radix, int32_t precision) // and only if the bottom part is not one. if ( !zernum( (*px)->pp ) && !equnum( (*px)->pq, num_one ) ) { - //wstring ratStr = RatToString(*px, FMT_FLOAT, radix, precision); - //PNUMBER pnum = StringToNumber(ratStr, radix, precision); - // - //destroyrat( *px ); - //*px = numtorat( pnum, radix); - //destroynum( pnum ); + wstring ratStr = RatToString(*px, FMT_FLOAT, radix, precision); + PNUMBER pnum = StringToNumber(ratStr, radix, precision); + + destroyrat( *px ); + *px = numtorat( pnum, radix); + destroynum( pnum ); PRAT pret = nullptr; DUPRAT(pret,*px);