CalcEngine: Remove the need to specify base/radix when working with Rational values (#31)

- Separates values from the representation (base/radix) of those values.
- Uses a single base for all values represented as Rationals.
- Rationals are converted to/from a specific base when they are converted to/from strings.
This commit is contained in:
Josh Koon
2019-02-22 10:00:19 -08:00
committed by GitHub
parent 47f9996fa9
commit 73372283a0
14 changed files with 146 additions and 145 deletions

View File

@@ -6,6 +6,10 @@
namespace CalcEngine
{
// Default Base/Radix to use for Rational calculations
// RatPack calculations currently support up to Base64.
inline constexpr uint32_t RATIONAL_BASE = 10;
class Rational
{
public:
@@ -14,7 +18,7 @@ namespace CalcEngine
Rational(Number const& p, Number const& q) noexcept;
Rational(int32_t i);
Rational(uint32_t ui);
Rational(uint64_t ui, uint32_t radix, int32_t precision);
Rational(uint64_t ui, int32_t precision);
explicit Rational(PRAT prat) noexcept;
PRAT ToPRAT() const;
@@ -29,13 +33,13 @@ namespace CalcEngine
Rational Div(Rational const& rhs, int32_t precision) const;
Rational Mod(Rational const& rhs) const;
Rational Lsh(Rational const& r, uint32_t radix, int32_t precision) const;
Rational Rsh(Rational const& r, uint32_t radix, int32_t precision) const;
Rational Lsh(Rational const& r, int32_t precision) const;
Rational Rsh(Rational const& r, int32_t precision) const;
Rational Not(bool isIntegerMode, Rational const& chopNum, uint32_t radix, int32_t precision) const;
Rational And(Rational const& r, uint32_t radix, int32_t precision) const;
Rational Or(Rational const& r, uint32_t radix, int32_t precision) const;
Rational Xor(Rational const& r, uint32_t radix, int32_t precision) const;
Rational Not(Rational const& chopNum, int32_t precision) const;
Rational And(Rational const& r, int32_t precision) const;
Rational Or(Rational const& r, int32_t precision) const;
Rational Xor(Rational const& r, int32_t precision) const;
bool IsZero() const;
bool IsLess(Rational const& r, int32_t precision) const;
@@ -44,7 +48,7 @@ namespace CalcEngine
bool IsEq(Rational const& r, int32_t precision) const;
std::wstring ToString(uint32_t radix, NUMOBJ_FMT format, int32_t precision) const;
uint64_t ToUInt64_t(uint32_t radix, int32_t precision) const;
uint64_t ToUInt64_t(int32_t precision) const;
private:
Number m_p;

View File

@@ -5,31 +5,31 @@
namespace CalcEngine::RationalMath
{
Rational Frac(Rational const& rat, uint32_t radix, int32_t precision);
Rational Integer(Rational const& rat, uint32_t radix, int32_t precision);
Rational Frac(Rational const& rat, int32_t precision);
Rational Integer(Rational const& rat, int32_t precision);
Rational Pow(Rational const& base, Rational const& pow, uint32_t radix, int32_t precision);
Rational Root(Rational const& base, Rational const& root, uint32_t radix, int32_t precision);
Rational Fact(Rational const& rat, uint32_t radix, int32_t precision);
Rational Pow(Rational const& base, Rational const& pow, int32_t precision);
Rational Root(Rational const& base, Rational const& root, int32_t precision);
Rational Fact(Rational const& rat, int32_t precision);
Rational Exp(Rational const& rat, uint32_t radix, int32_t precision);
Rational Exp(Rational const& rat, int32_t precision);
Rational Log(Rational const& rat, int32_t precision);
Rational Log10(Rational const& rat, int32_t precision);
Rational Invert(Rational const& rat, int32_t precision);
Rational Abs(Rational const& rat);
Rational Sin(Rational const& rat, ANGLE_TYPE angletype, uint32_t radix, int32_t precision);
Rational Cos(Rational const& rat, ANGLE_TYPE angletype, uint32_t radix, int32_t precision);
Rational Tan(Rational const& rat, ANGLE_TYPE angletype, uint32_t radix, int32_t precision);
Rational ASin(Rational const& rat, ANGLE_TYPE angletype, uint32_t radix, int32_t precision);
Rational ACos(Rational const& rat, ANGLE_TYPE angletype, uint32_t radix, int32_t precision);
Rational ATan(Rational const& rat, ANGLE_TYPE angletype, uint32_t radix, int32_t precision);
Rational Sin(Rational const& rat, ANGLE_TYPE angletype, int32_t precision);
Rational Cos(Rational const& rat, ANGLE_TYPE angletype, int32_t precision);
Rational Tan(Rational const& rat, ANGLE_TYPE angletype, int32_t precision);
Rational ASin(Rational const& rat, ANGLE_TYPE angletype, int32_t precision);
Rational ACos(Rational const& rat, ANGLE_TYPE angletype, int32_t precision);
Rational ATan(Rational const& rat, ANGLE_TYPE angletype, int32_t precision);
Rational Sinh(Rational const& rat, uint32_t radix, int32_t precision);
Rational Cosh(Rational const& rat, uint32_t radix, int32_t precision);
Rational Tanh(Rational const& rat, uint32_t radix, int32_t precision);
Rational ASinh(Rational const& rat, uint32_t radix, int32_t precision);
Rational ACosh(Rational const& rat, uint32_t radix, int32_t precision);
Rational Sinh(Rational const& rat, int32_t precision);
Rational Cosh(Rational const& rat, int32_t precision);
Rational Tanh(Rational const& rat, int32_t precision);
Rational ASinh(Rational const& rat, int32_t precision);
Rational ACosh(Rational const& rat, int32_t precision);
Rational ATanh(Rational const& rat, int32_t precision);
}
}