Convet Rational::Sub to - and -= operator overrides.

This commit is contained in:
Josh Koon 2019-02-21 10:38:10 -08:00
commit 4961b7c967
6 changed files with 23 additions and 17 deletions

View file

@ -114,20 +114,14 @@ namespace CalcEngine
return *this; return *this;
} }
Rational operator+(Rational lhs, Rational const& rhs) Rational& Rational::operator-=(Rational const& rhs)
{
lhs += rhs;
return lhs;
}
Rational Rational::Sub(Rational const& rhs, int32_t precision) const
{ {
PRAT lhsRat = this->ToPRAT(); PRAT lhsRat = this->ToPRAT();
PRAT rhsRat = rhs.ToPRAT(); PRAT rhsRat = rhs.ToPRAT();
try try
{ {
subrat(&lhsRat, rhsRat, precision); subrat(&lhsRat, rhsRat, RATIONAL_PRECISION);
destroyrat(rhsRat); destroyrat(rhsRat);
} }
catch (DWORD error) catch (DWORD error)
@ -137,10 +131,22 @@ namespace CalcEngine
throw(error); throw(error);
} }
Rational result = Rational{ lhsRat }; *this = Rational{ lhsRat };
destroyrat(lhsRat); destroyrat(lhsRat);
return result; return *this;
}
Rational operator+(Rational lhs, Rational const& rhs)
{
lhs += rhs;
return lhs;
}
Rational operator-(Rational lhs, Rational const& rhs)
{
lhs -= rhs;
return lhs;
} }
Rational Rational::Mul(Rational const& rhs, int32_t precision) const Rational Rational::Mul(Rational const& rhs, int32_t precision) const

View file

@ -727,7 +727,7 @@ void CCalcEngine::ProcessCommandWorker(WPARAM wParam)
{ {
/* MMINUS subtracts m_currentVal to immediate memory and kills the "mem" */ /* MMINUS subtracts m_currentVal to immediate memory and kills the "mem" */
/* indicator if the result is zero. */ /* indicator if the result is zero. */
Rational result = m_memoryValue->Sub(m_currentVal, m_precision); Rational result = *m_memoryValue - m_currentVal;
m_memoryValue = make_unique<Rational>(TruncateNumForIntMath(result)); m_memoryValue = make_unique<Rational>(TruncateNumForIntMath(result));
break; break;

View file

@ -64,8 +64,7 @@ CalcEngine::Rational CCalcEngine::TruncateNumForIntMath(CalcEngine::Rational con
if (result.IsLess(0, m_precision)) if (result.IsLess(0, m_precision))
{ {
// if negative make positive by doing a twos complement // if negative make positive by doing a twos complement
result = -(result); result = -(result) - 1;
result = result.Sub(1, m_precision);
result = result.Not(m_chopNumbers[m_numwidth], m_precision); result = result.Not(m_chopNumbers[m_numwidth], m_precision);
} }

View file

@ -182,14 +182,14 @@ CalcEngine::Rational CCalcEngine::SciCalcFunctions(CalcEngine::Rational const& r
Rational degreeRat = Integer(rat, m_precision); Rational degreeRat = Integer(rat, m_precision);
Rational minuteRat = rat.Sub(degreeRat, m_precision); Rational minuteRat = rat - degreeRat;
minuteRat = minuteRat.Mul(shftRat, m_precision); minuteRat = minuteRat.Mul(shftRat, m_precision);
Rational secondRat = minuteRat; Rational secondRat = minuteRat;
minuteRat = Integer(minuteRat, m_precision); minuteRat = Integer(minuteRat, m_precision);
secondRat = secondRat.Sub(minuteRat, m_precision); secondRat -= minuteRat;
secondRat = secondRat.Mul(shftRat, m_precision); secondRat = secondRat.Mul(shftRat, m_precision);
// //

View file

@ -69,7 +69,7 @@ CalcEngine::Rational CCalcEngine::DoOperation(int operation, CalcEngine::Rationa
break; break;
case IDC_SUB: case IDC_SUB:
result = rhs.Sub(result, m_precision); result = rhs - result;
break; break;
case IDC_MUL: case IDC_MUL:

View file

@ -31,12 +31,13 @@ namespace CalcEngine
Rational operator-() const; Rational operator-() const;
Rational& operator+=(Rational const& rhs); Rational& operator+=(Rational const& rhs);
Rational Sub(Rational const& rhs, int32_t precision) const; Rational& operator-=(Rational const& rhs);
Rational Mul(Rational const& rhs, int32_t precision) const; Rational Mul(Rational const& rhs, int32_t precision) const;
Rational Div(Rational const& rhs, int32_t precision) const; Rational Div(Rational const& rhs, int32_t precision) const;
Rational Mod(Rational const& rhs) const; Rational Mod(Rational const& rhs) const;
friend Rational operator+(Rational lhs, Rational const& rhs); friend Rational operator+(Rational lhs, Rational const& rhs);
friend Rational operator-(Rational lhs, Rational const& rhs);
Rational Lsh(Rational const& r, int32_t precision) const; Rational Lsh(Rational const& r, int32_t precision) const;
Rational Rsh(Rational const& r, int32_t precision) const; Rational Rsh(Rational const& r, int32_t precision) const;