mirror of
https://github.com/Microsoft/calculator.git
synced 2025-08-22 06:13:14 -07:00
Remove unnecessary precision variable from RationalMath operations
This commit is contained in:
parent
5e4eaf636a
commit
41db5fa28d
7 changed files with 93 additions and 93 deletions
|
@ -95,7 +95,7 @@ CCalcEngine::CCalcEngine(bool fPrecedence, bool fIntegerMode, CalculationManager
|
||||||
|
|
||||||
m_dwWordBitWidth = DwWordBitWidthFromeNumWidth(m_numwidth);
|
m_dwWordBitWidth = DwWordBitWidthFromeNumWidth(m_numwidth);
|
||||||
|
|
||||||
m_maxTrigonometricNum = RationalMath::Pow(10, 100, m_precision);
|
m_maxTrigonometricNum = RationalMath::Pow(10, 100);
|
||||||
|
|
||||||
SetRadixTypeAndNumWidth(DEC_RADIX, m_numwidth);
|
SetRadixTypeAndNumWidth(DEC_RADIX, m_numwidth);
|
||||||
SettingsChanged();
|
SettingsChanged();
|
||||||
|
@ -118,7 +118,7 @@ void CCalcEngine::InitChopNumbers()
|
||||||
for (size_t i = 0; i < m_chopNumbers.size(); i++)
|
for (size_t i = 0; i < m_chopNumbers.size(); i++)
|
||||||
{
|
{
|
||||||
auto maxVal = m_chopNumbers[i] / 2;
|
auto maxVal = m_chopNumbers[i] / 2;
|
||||||
maxVal = RationalMath::Integer(maxVal, m_precision);
|
maxVal = RationalMath::Integer(maxVal);
|
||||||
|
|
||||||
m_maxDecimalValueStrings[i] = maxVal.ToString(10, FMT_FLOAT, m_precision);
|
m_maxDecimalValueStrings[i] = maxVal.ToString(10, FMT_FLOAT, m_precision);
|
||||||
}
|
}
|
||||||
|
|
|
@ -57,7 +57,7 @@ CalcEngine::Rational CCalcEngine::TruncateNumForIntMath(CalcEngine::Rational con
|
||||||
}
|
}
|
||||||
|
|
||||||
// Truncate to an integer. Do not round here.
|
// Truncate to an integer. Do not round here.
|
||||||
auto result = RationalMath::Integer(rat, m_precision);
|
auto result = RationalMath::Integer(rat);
|
||||||
|
|
||||||
// Can be converting a dec negative number to Hex/Oct/Bin rep. Use 2's complement form
|
// Can be converting a dec negative number to Hex/Oct/Bin rep. Use 2's complement form
|
||||||
// Check the range.
|
// Check the range.
|
||||||
|
|
|
@ -32,14 +32,14 @@ CalcEngine::Rational CCalcEngine::SciCalcFunctions(CalcEngine::Rational const& r
|
||||||
switch (op)
|
switch (op)
|
||||||
{
|
{
|
||||||
case IDC_CHOP:
|
case IDC_CHOP:
|
||||||
result = m_bInv ? Frac(rat, m_precision) : Integer(rat, m_precision);
|
result = m_bInv ? Frac(rat) : Integer(rat);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/* Return complement. */
|
/* Return complement. */
|
||||||
case IDC_COM:
|
case IDC_COM:
|
||||||
if (m_radix == 10 && !m_fIntegerMode)
|
if (m_radix == 10 && !m_fIntegerMode)
|
||||||
{
|
{
|
||||||
result = -(RationalMath::Integer(rat, m_precision) + 1);
|
result = -(RationalMath::Integer(rat) + 1);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -51,7 +51,7 @@ CalcEngine::Rational CCalcEngine::SciCalcFunctions(CalcEngine::Rational const& r
|
||||||
case IDC_ROL:
|
case IDC_ROL:
|
||||||
if (m_fIntegerMode)
|
if (m_fIntegerMode)
|
||||||
{
|
{
|
||||||
result = Integer(rat, m_precision);
|
result = Integer(rat);
|
||||||
|
|
||||||
uint64_t w64Bits = result.ToUInt64_t();
|
uint64_t w64Bits = result.ToUInt64_t();
|
||||||
uint64_t msb = (w64Bits >> (m_dwWordBitWidth - 1)) & 1;
|
uint64_t msb = (w64Bits >> (m_dwWordBitWidth - 1)) & 1;
|
||||||
|
@ -66,7 +66,7 @@ CalcEngine::Rational CCalcEngine::SciCalcFunctions(CalcEngine::Rational const& r
|
||||||
case IDC_ROR:
|
case IDC_ROR:
|
||||||
if (m_fIntegerMode)
|
if (m_fIntegerMode)
|
||||||
{
|
{
|
||||||
result = Integer(rat, m_precision);
|
result = Integer(rat);
|
||||||
|
|
||||||
uint64_t w64Bits = result.ToUInt64_t();
|
uint64_t w64Bits = result.ToUInt64_t();
|
||||||
uint64_t lsb = ((w64Bits & 0x01) == 1) ? 1 : 0;
|
uint64_t lsb = ((w64Bits & 0x01) == 1) ? 1 : 0;
|
||||||
|
@ -95,76 +95,76 @@ CalcEngine::Rational CCalcEngine::SciCalcFunctions(CalcEngine::Rational const& r
|
||||||
case IDC_SIN: /* Sine; normal and arc */
|
case IDC_SIN: /* Sine; normal and arc */
|
||||||
if (!m_fIntegerMode)
|
if (!m_fIntegerMode)
|
||||||
{
|
{
|
||||||
result = m_bInv ? ASin(rat, m_angletype, m_precision) : Sin(rat, m_angletype, m_precision);
|
result = m_bInv ? ASin(rat, m_angletype) : Sin(rat, m_angletype);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case IDC_SINH: /* Sine- hyperbolic and archyperbolic */
|
case IDC_SINH: /* Sine- hyperbolic and archyperbolic */
|
||||||
if (!m_fIntegerMode)
|
if (!m_fIntegerMode)
|
||||||
{
|
{
|
||||||
result = m_bInv ? ASinh(rat, m_precision) : Sinh(rat, m_precision);
|
result = m_bInv ? ASinh(rat) : Sinh(rat);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case IDC_COS: /* Cosine, follows convention of sine function. */
|
case IDC_COS: /* Cosine, follows convention of sine function. */
|
||||||
if (!m_fIntegerMode)
|
if (!m_fIntegerMode)
|
||||||
{
|
{
|
||||||
result = m_bInv ? ACos(rat, m_angletype, m_precision) : Cos(rat, m_angletype, m_precision);
|
result = m_bInv ? ACos(rat, m_angletype) : Cos(rat, m_angletype);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case IDC_COSH: /* Cosine hyperbolic, follows convention of sine h function. */
|
case IDC_COSH: /* Cosine hyperbolic, follows convention of sine h function. */
|
||||||
if (!m_fIntegerMode)
|
if (!m_fIntegerMode)
|
||||||
{
|
{
|
||||||
result = m_bInv ? ACosh(rat, m_precision) : Cosh(rat, m_precision);
|
result = m_bInv ? ACosh(rat) : Cosh(rat);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case IDC_TAN: /* Same as sine and cosine. */
|
case IDC_TAN: /* Same as sine and cosine. */
|
||||||
if (!m_fIntegerMode)
|
if (!m_fIntegerMode)
|
||||||
{
|
{
|
||||||
result = m_bInv ? ATan(rat, m_angletype, m_precision) : Tan(rat, m_angletype, m_precision);
|
result = m_bInv ? ATan(rat, m_angletype) : Tan(rat, m_angletype);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case IDC_TANH: /* Same as sine h and cosine h. */
|
case IDC_TANH: /* Same as sine h and cosine h. */
|
||||||
if (!m_fIntegerMode)
|
if (!m_fIntegerMode)
|
||||||
{
|
{
|
||||||
result = m_bInv ? ATanh(rat, m_precision) : Tanh(rat, m_precision);
|
result = m_bInv ? ATanh(rat) : Tanh(rat);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case IDC_REC: /* Reciprocal. */
|
case IDC_REC: /* Reciprocal. */
|
||||||
result = Invert(rat, m_precision);
|
result = Invert(rat);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case IDC_SQR: /* Square */
|
case IDC_SQR: /* Square */
|
||||||
result = Pow(rat, 2, m_precision);
|
result = Pow(rat, 2);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case IDC_SQRT: /* Square Root */
|
case IDC_SQRT: /* Square Root */
|
||||||
result = Root(rat, 2, m_precision);
|
result = Root(rat, 2);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case IDC_CUBEROOT:
|
case IDC_CUBEROOT:
|
||||||
case IDC_CUB: /* Cubing and cube root functions. */
|
case IDC_CUB: /* Cubing and cube root functions. */
|
||||||
result = IDC_CUBEROOT == op ? Root(rat, 3, m_precision) : Pow(rat, 3, m_precision);
|
result = IDC_CUBEROOT == op ? Root(rat, 3) : Pow(rat, 3);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case IDC_LOG: /* Functions for common log. */
|
case IDC_LOG: /* Functions for common log. */
|
||||||
result = Log10(rat, m_precision);
|
result = Log10(rat);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case IDC_POW10:
|
case IDC_POW10:
|
||||||
result = Pow(10, rat, m_precision);
|
result = Pow(10, rat);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case IDC_LN: /* Functions for natural log. */
|
case IDC_LN: /* Functions for natural log. */
|
||||||
result = m_bInv ? Exp(rat, m_precision) : Log(rat, m_precision);
|
result = m_bInv ? Exp(rat) : Log(rat);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case IDC_FAC: /* Calculate factorial. Inverse is ineffective. */
|
case IDC_FAC: /* Calculate factorial. Inverse is ineffective. */
|
||||||
result = Fact(rat, m_precision);
|
result = Fact(rat);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case IDC_DEGREES:
|
case IDC_DEGREES:
|
||||||
|
@ -179,13 +179,13 @@ CalcEngine::Rational CCalcEngine::SciCalcFunctions(CalcEngine::Rational const& r
|
||||||
{
|
{
|
||||||
auto shftRat{ m_bInv ? 100 : 60 };
|
auto shftRat{ m_bInv ? 100 : 60 };
|
||||||
|
|
||||||
Rational degreeRat = Integer(rat, m_precision);
|
Rational degreeRat = Integer(rat);
|
||||||
|
|
||||||
Rational minuteRat = (rat - degreeRat) * shftRat;
|
Rational minuteRat = (rat - degreeRat) * shftRat;
|
||||||
|
|
||||||
Rational secondRat = minuteRat;
|
Rational secondRat = minuteRat;
|
||||||
|
|
||||||
minuteRat = Integer(minuteRat, m_precision);
|
minuteRat = Integer(minuteRat);
|
||||||
|
|
||||||
secondRat = (secondRat - minuteRat) * shftRat;
|
secondRat = (secondRat - minuteRat) * shftRat;
|
||||||
|
|
||||||
|
|
|
@ -8,12 +8,12 @@
|
||||||
using namespace std;
|
using namespace std;
|
||||||
using namespace CalcEngine;
|
using namespace CalcEngine;
|
||||||
|
|
||||||
Rational RationalMath::Frac(Rational const& rat, int32_t precision)
|
Rational RationalMath::Frac(Rational const& rat)
|
||||||
{
|
{
|
||||||
PRAT prat = rat.ToPRAT();
|
PRAT prat = rat.ToPRAT();
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
fracrat(&prat, RATIONAL_BASE, precision);
|
fracrat(&prat, RATIONAL_BASE, RATIONAL_PRECISION);
|
||||||
}
|
}
|
||||||
catch (DWORD error)
|
catch (DWORD error)
|
||||||
{
|
{
|
||||||
|
@ -27,12 +27,12 @@ Rational RationalMath::Frac(Rational const& rat, int32_t precision)
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
Rational RationalMath::Integer(Rational const& rat, int32_t precision)
|
Rational RationalMath::Integer(Rational const& rat)
|
||||||
{
|
{
|
||||||
PRAT prat = rat.ToPRAT();
|
PRAT prat = rat.ToPRAT();
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
intrat(&prat, RATIONAL_BASE, precision);
|
intrat(&prat, RATIONAL_BASE, RATIONAL_PRECISION);
|
||||||
}
|
}
|
||||||
catch (DWORD error)
|
catch (DWORD error)
|
||||||
{
|
{
|
||||||
|
@ -46,14 +46,14 @@ Rational RationalMath::Integer(Rational const& rat, int32_t precision)
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
Rational RationalMath::Pow(Rational const& base, Rational const& pow, int32_t precision)
|
Rational RationalMath::Pow(Rational const& base, Rational const& pow)
|
||||||
{
|
{
|
||||||
PRAT baseRat = base.ToPRAT();
|
PRAT baseRat = base.ToPRAT();
|
||||||
PRAT powRat = pow.ToPRAT();
|
PRAT powRat = pow.ToPRAT();
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
powrat(&baseRat, powRat, RATIONAL_BASE, precision);
|
powrat(&baseRat, powRat, RATIONAL_BASE, RATIONAL_PRECISION);
|
||||||
destroyrat(powRat);
|
destroyrat(powRat);
|
||||||
}
|
}
|
||||||
catch (DWORD error)
|
catch (DWORD error)
|
||||||
|
@ -69,18 +69,18 @@ Rational RationalMath::Pow(Rational const& base, Rational const& pow, int32_t pr
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
Rational RationalMath::Root(Rational const& base, Rational const& root, int32_t precision)
|
Rational RationalMath::Root(Rational const& base, Rational const& root)
|
||||||
{
|
{
|
||||||
return Pow(base, Invert(root, precision), precision);
|
return Pow(base, Invert(root));
|
||||||
}
|
}
|
||||||
|
|
||||||
Rational RationalMath::Fact(Rational const& rat, int32_t precision)
|
Rational RationalMath::Fact(Rational const& rat)
|
||||||
{
|
{
|
||||||
PRAT prat = rat.ToPRAT();
|
PRAT prat = rat.ToPRAT();
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
factrat(&prat, RATIONAL_BASE, precision);
|
factrat(&prat, RATIONAL_BASE, RATIONAL_PRECISION);
|
||||||
}
|
}
|
||||||
catch (DWORD error)
|
catch (DWORD error)
|
||||||
{
|
{
|
||||||
|
@ -94,13 +94,13 @@ Rational RationalMath::Fact(Rational const& rat, int32_t precision)
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
Rational RationalMath::Exp(Rational const& rat, int32_t precision)
|
Rational RationalMath::Exp(Rational const& rat)
|
||||||
{
|
{
|
||||||
PRAT prat = rat.ToPRAT();
|
PRAT prat = rat.ToPRAT();
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
exprat(&prat, RATIONAL_BASE, precision);
|
exprat(&prat, RATIONAL_BASE, RATIONAL_PRECISION);
|
||||||
}
|
}
|
||||||
catch (DWORD error)
|
catch (DWORD error)
|
||||||
{
|
{
|
||||||
|
@ -114,13 +114,13 @@ Rational RationalMath::Exp(Rational const& rat, int32_t precision)
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
Rational RationalMath::Log(Rational const& rat, int32_t precision)
|
Rational RationalMath::Log(Rational const& rat)
|
||||||
{
|
{
|
||||||
PRAT prat = rat.ToPRAT();
|
PRAT prat = rat.ToPRAT();
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
lograt(&prat, precision);
|
lograt(&prat, RATIONAL_PRECISION);
|
||||||
}
|
}
|
||||||
catch (DWORD error)
|
catch (DWORD error)
|
||||||
{
|
{
|
||||||
|
@ -134,12 +134,12 @@ Rational RationalMath::Log(Rational const& rat, int32_t precision)
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
Rational RationalMath::Log10(Rational const& rat, int32_t precision)
|
Rational RationalMath::Log10(Rational const& rat)
|
||||||
{
|
{
|
||||||
return Log(rat, precision) / Rational{ ln_ten };
|
return Log(rat) / Rational{ ln_ten };
|
||||||
}
|
}
|
||||||
|
|
||||||
Rational RationalMath::Invert(Rational const& rat, int32_t precision)
|
Rational RationalMath::Invert(Rational const& rat)
|
||||||
{
|
{
|
||||||
return 1 / rat;
|
return 1 / rat;
|
||||||
}
|
}
|
||||||
|
@ -149,13 +149,13 @@ Rational RationalMath::Abs(Rational const& rat)
|
||||||
return Rational{ Number{ 1, rat.P().Exp(), rat.P().Mantissa() }, Number{ 1, rat.Q().Exp(), rat.Q().Mantissa() } };
|
return Rational{ Number{ 1, rat.P().Exp(), rat.P().Mantissa() }, Number{ 1, rat.Q().Exp(), rat.Q().Mantissa() } };
|
||||||
}
|
}
|
||||||
|
|
||||||
Rational RationalMath::Sin(Rational const& rat, ANGLE_TYPE angletype, int32_t precision)
|
Rational RationalMath::Sin(Rational const& rat, ANGLE_TYPE angletype)
|
||||||
{
|
{
|
||||||
PRAT prat = rat.ToPRAT();
|
PRAT prat = rat.ToPRAT();
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
sinanglerat(&prat, angletype, RATIONAL_BASE, precision);
|
sinanglerat(&prat, angletype, RATIONAL_BASE, RATIONAL_PRECISION);
|
||||||
}
|
}
|
||||||
catch (DWORD error)
|
catch (DWORD error)
|
||||||
{
|
{
|
||||||
|
@ -169,13 +169,13 @@ Rational RationalMath::Sin(Rational const& rat, ANGLE_TYPE angletype, int32_t pr
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
Rational RationalMath::Cos(Rational const& rat, ANGLE_TYPE angletype, int32_t precision)
|
Rational RationalMath::Cos(Rational const& rat, ANGLE_TYPE angletype)
|
||||||
{
|
{
|
||||||
PRAT prat = rat.ToPRAT();
|
PRAT prat = rat.ToPRAT();
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
cosanglerat(&prat, angletype, RATIONAL_BASE, precision);
|
cosanglerat(&prat, angletype, RATIONAL_BASE, RATIONAL_PRECISION);
|
||||||
}
|
}
|
||||||
catch (DWORD error)
|
catch (DWORD error)
|
||||||
{
|
{
|
||||||
|
@ -189,13 +189,13 @@ Rational RationalMath::Cos(Rational const& rat, ANGLE_TYPE angletype, int32_t pr
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
Rational RationalMath::Tan(Rational const& rat, ANGLE_TYPE angletype, int32_t precision)
|
Rational RationalMath::Tan(Rational const& rat, ANGLE_TYPE angletype)
|
||||||
{
|
{
|
||||||
PRAT prat = rat.ToPRAT();
|
PRAT prat = rat.ToPRAT();
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
tananglerat(&prat, angletype, RATIONAL_BASE, precision);
|
tananglerat(&prat, angletype, RATIONAL_BASE, RATIONAL_PRECISION);
|
||||||
}
|
}
|
||||||
catch (DWORD error)
|
catch (DWORD error)
|
||||||
{
|
{
|
||||||
|
@ -209,13 +209,13 @@ Rational RationalMath::Tan(Rational const& rat, ANGLE_TYPE angletype, int32_t pr
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
Rational RationalMath::ASin(Rational const& rat, ANGLE_TYPE angletype, int32_t precision)
|
Rational RationalMath::ASin(Rational const& rat, ANGLE_TYPE angletype)
|
||||||
{
|
{
|
||||||
PRAT prat = rat.ToPRAT();
|
PRAT prat = rat.ToPRAT();
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
asinanglerat(&prat, angletype, RATIONAL_BASE, precision);
|
asinanglerat(&prat, angletype, RATIONAL_BASE, RATIONAL_PRECISION);
|
||||||
}
|
}
|
||||||
catch (DWORD error)
|
catch (DWORD error)
|
||||||
{
|
{
|
||||||
|
@ -229,13 +229,13 @@ Rational RationalMath::ASin(Rational const& rat, ANGLE_TYPE angletype, int32_t p
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
Rational RationalMath::ACos(Rational const& rat, ANGLE_TYPE angletype, int32_t precision)
|
Rational RationalMath::ACos(Rational const& rat, ANGLE_TYPE angletype)
|
||||||
{
|
{
|
||||||
PRAT prat = rat.ToPRAT();
|
PRAT prat = rat.ToPRAT();
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
acosanglerat(&prat, angletype, RATIONAL_BASE, precision);
|
acosanglerat(&prat, angletype, RATIONAL_BASE, RATIONAL_PRECISION);
|
||||||
}
|
}
|
||||||
catch (DWORD error)
|
catch (DWORD error)
|
||||||
{
|
{
|
||||||
|
@ -249,13 +249,13 @@ Rational RationalMath::ACos(Rational const& rat, ANGLE_TYPE angletype, int32_t p
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
Rational RationalMath::ATan(Rational const& rat, ANGLE_TYPE angletype, int32_t precision)
|
Rational RationalMath::ATan(Rational const& rat, ANGLE_TYPE angletype)
|
||||||
{
|
{
|
||||||
PRAT prat = rat.ToPRAT();
|
PRAT prat = rat.ToPRAT();
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
atananglerat(&prat, angletype, RATIONAL_BASE, precision);
|
atananglerat(&prat, angletype, RATIONAL_BASE, RATIONAL_PRECISION);
|
||||||
}
|
}
|
||||||
catch (DWORD error)
|
catch (DWORD error)
|
||||||
{
|
{
|
||||||
|
@ -269,13 +269,13 @@ Rational RationalMath::ATan(Rational const& rat, ANGLE_TYPE angletype, int32_t p
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
Rational RationalMath::Sinh(Rational const& rat, int32_t precision)
|
Rational RationalMath::Sinh(Rational const& rat)
|
||||||
{
|
{
|
||||||
PRAT prat = rat.ToPRAT();
|
PRAT prat = rat.ToPRAT();
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
sinhrat(&prat, RATIONAL_BASE, precision);
|
sinhrat(&prat, RATIONAL_BASE, RATIONAL_PRECISION);
|
||||||
}
|
}
|
||||||
catch (DWORD error)
|
catch (DWORD error)
|
||||||
{
|
{
|
||||||
|
@ -289,13 +289,13 @@ Rational RationalMath::Sinh(Rational const& rat, int32_t precision)
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
Rational RationalMath::Cosh(Rational const& rat, int32_t precision)
|
Rational RationalMath::Cosh(Rational const& rat)
|
||||||
{
|
{
|
||||||
PRAT prat = rat.ToPRAT();
|
PRAT prat = rat.ToPRAT();
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
coshrat(&prat, RATIONAL_BASE, precision);
|
coshrat(&prat, RATIONAL_BASE, RATIONAL_PRECISION);
|
||||||
}
|
}
|
||||||
catch (DWORD error)
|
catch (DWORD error)
|
||||||
{
|
{
|
||||||
|
@ -309,13 +309,13 @@ Rational RationalMath::Cosh(Rational const& rat, int32_t precision)
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
Rational RationalMath::Tanh(Rational const& rat, int32_t precision)
|
Rational RationalMath::Tanh(Rational const& rat)
|
||||||
{
|
{
|
||||||
PRAT prat = rat.ToPRAT();
|
PRAT prat = rat.ToPRAT();
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
tanhrat(&prat, RATIONAL_BASE, precision);
|
tanhrat(&prat, RATIONAL_BASE, RATIONAL_PRECISION);
|
||||||
}
|
}
|
||||||
catch (DWORD error)
|
catch (DWORD error)
|
||||||
{
|
{
|
||||||
|
@ -329,13 +329,13 @@ Rational RationalMath::Tanh(Rational const& rat, int32_t precision)
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
Rational RationalMath::ASinh(Rational const& rat, int32_t precision)
|
Rational RationalMath::ASinh(Rational const& rat)
|
||||||
{
|
{
|
||||||
PRAT prat = rat.ToPRAT();
|
PRAT prat = rat.ToPRAT();
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
asinhrat(&prat, RATIONAL_BASE, precision);
|
asinhrat(&prat, RATIONAL_BASE, RATIONAL_PRECISION);
|
||||||
}
|
}
|
||||||
catch (DWORD error)
|
catch (DWORD error)
|
||||||
{
|
{
|
||||||
|
@ -349,13 +349,13 @@ Rational RationalMath::ASinh(Rational const& rat, int32_t precision)
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
Rational RationalMath::ACosh(Rational const& rat, int32_t precision)
|
Rational RationalMath::ACosh(Rational const& rat)
|
||||||
{
|
{
|
||||||
PRAT prat = rat.ToPRAT();
|
PRAT prat = rat.ToPRAT();
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
acoshrat(&prat, RATIONAL_BASE, precision);
|
acoshrat(&prat, RATIONAL_BASE, RATIONAL_PRECISION);
|
||||||
}
|
}
|
||||||
catch (DWORD error)
|
catch (DWORD error)
|
||||||
{
|
{
|
||||||
|
@ -369,13 +369,13 @@ Rational RationalMath::ACosh(Rational const& rat, int32_t precision)
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
Rational RationalMath::ATanh(Rational const& rat, int32_t precision)
|
Rational RationalMath::ATanh(Rational const& rat)
|
||||||
{
|
{
|
||||||
PRAT prat = rat.ToPRAT();
|
PRAT prat = rat.ToPRAT();
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
atanhrat(&prat, precision);
|
atanhrat(&prat, RATIONAL_PRECISION);
|
||||||
}
|
}
|
||||||
catch (DWORD error)
|
catch (DWORD error)
|
||||||
{
|
{
|
||||||
|
|
|
@ -44,10 +44,10 @@ CalcEngine::Rational CCalcEngine::DoOperation(int operation, CalcEngine::Rationa
|
||||||
|
|
||||||
if (fMsb)
|
if (fMsb)
|
||||||
{
|
{
|
||||||
result = Integer(result, m_precision);
|
result = Integer(result);
|
||||||
|
|
||||||
auto tempRat = m_chopNumbers[m_numwidth] >> holdVal;
|
auto tempRat = m_chopNumbers[m_numwidth] >> holdVal;
|
||||||
tempRat = Integer(tempRat, m_precision);
|
tempRat = Integer(tempRat);
|
||||||
|
|
||||||
result |= tempRat ^ m_chopNumbers[m_numwidth];
|
result |= tempRat ^ m_chopNumbers[m_numwidth];
|
||||||
}
|
}
|
||||||
|
@ -118,18 +118,18 @@ CalcEngine::Rational CCalcEngine::DoOperation(int operation, CalcEngine::Rationa
|
||||||
|
|
||||||
if (m_fIntegerMode && iFinalSign == -1)
|
if (m_fIntegerMode && iFinalSign == -1)
|
||||||
{
|
{
|
||||||
result = -(Integer(result, m_precision));
|
result = -(Integer(result));
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case IDC_PWR: // Calculates rhs to the result(th) power.
|
case IDC_PWR: // Calculates rhs to the result(th) power.
|
||||||
result = Pow(rhs, result, m_precision);
|
result = Pow(rhs, result);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case IDC_ROOT: // Calculates rhs to the result(th) root.
|
case IDC_ROOT: // Calculates rhs to the result(th) root.
|
||||||
result = Root(rhs, result, m_precision);
|
result = Root(rhs, result);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -84,7 +84,7 @@ bool CCalcEngine::TryToggleBit(CalcEngine::Rational& rat, DWORD wbitno)
|
||||||
return false; // ignore error cant happen
|
return false; // ignore error cant happen
|
||||||
}
|
}
|
||||||
|
|
||||||
Rational result = Integer(rat, m_precision);
|
Rational result = Integer(rat);
|
||||||
if (result.IsZero())
|
if (result.IsZero())
|
||||||
{
|
{
|
||||||
// This is the same work around happenning in SciCalcFunctions. Ought to move to intrat function itself.
|
// This is the same work around happenning in SciCalcFunctions. Ought to move to intrat function itself.
|
||||||
|
@ -92,8 +92,8 @@ bool CCalcEngine::TryToggleBit(CalcEngine::Rational& rat, DWORD wbitno)
|
||||||
result = 0;
|
result = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto pow = Pow(2, static_cast<int32_t>(wbitno), m_precision);
|
// XOR the result with 2^wbitno power
|
||||||
rat = result ^ pow;
|
rat = result ^ Pow(2, static_cast<int32_t>(wbitno));
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,31 +5,31 @@
|
||||||
|
|
||||||
namespace CalcEngine::RationalMath
|
namespace CalcEngine::RationalMath
|
||||||
{
|
{
|
||||||
Rational Frac(Rational const& rat, int32_t precision);
|
Rational Frac(Rational const& rat);
|
||||||
Rational Integer(Rational const& rat, int32_t precision);
|
Rational Integer(Rational const& rat);
|
||||||
|
|
||||||
Rational Pow(Rational const& base, Rational const& pow, int32_t precision);
|
Rational Pow(Rational const& base, Rational const& pow);
|
||||||
Rational Root(Rational const& base, Rational const& root, int32_t precision);
|
Rational Root(Rational const& base, Rational const& root);
|
||||||
Rational Fact(Rational const& rat, int32_t precision);
|
Rational Fact(Rational const& rat);
|
||||||
|
|
||||||
Rational Exp(Rational const& rat, int32_t precision);
|
Rational Exp(Rational const& rat);
|
||||||
Rational Log(Rational const& rat, int32_t precision);
|
Rational Log(Rational const& rat);
|
||||||
Rational Log10(Rational const& rat, int32_t precision);
|
Rational Log10(Rational const& rat);
|
||||||
|
|
||||||
Rational Invert(Rational const& rat, int32_t precision);
|
Rational Invert(Rational const& rat);
|
||||||
Rational Abs(Rational const& rat);
|
Rational Abs(Rational const& rat);
|
||||||
|
|
||||||
Rational Sin(Rational const& rat, ANGLE_TYPE angletype, int32_t precision);
|
Rational Sin(Rational const& rat, ANGLE_TYPE angletype);
|
||||||
Rational Cos(Rational const& rat, ANGLE_TYPE angletype, int32_t precision);
|
Rational Cos(Rational const& rat, ANGLE_TYPE angletype);
|
||||||
Rational Tan(Rational const& rat, ANGLE_TYPE angletype, int32_t precision);
|
Rational Tan(Rational const& rat, ANGLE_TYPE angletype);
|
||||||
Rational ASin(Rational const& rat, ANGLE_TYPE angletype, int32_t precision);
|
Rational ASin(Rational const& rat, ANGLE_TYPE angletype);
|
||||||
Rational ACos(Rational const& rat, ANGLE_TYPE angletype, int32_t precision);
|
Rational ACos(Rational const& rat, ANGLE_TYPE angletype);
|
||||||
Rational ATan(Rational const& rat, ANGLE_TYPE angletype, int32_t precision);
|
Rational ATan(Rational const& rat, ANGLE_TYPE angletype);
|
||||||
|
|
||||||
Rational Sinh(Rational const& rat, int32_t precision);
|
Rational Sinh(Rational const& rat);
|
||||||
Rational Cosh(Rational const& rat, int32_t precision);
|
Rational Cosh(Rational const& rat);
|
||||||
Rational Tanh(Rational const& rat, int32_t precision);
|
Rational Tanh(Rational const& rat);
|
||||||
Rational ASinh(Rational const& rat, int32_t precision);
|
Rational ASinh(Rational const& rat);
|
||||||
Rational ACosh(Rational const& rat, int32_t precision);
|
Rational ACosh(Rational const& rat);
|
||||||
Rational ATanh(Rational const& rat, int32_t precision);
|
Rational ATanh(Rational const& rat);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue