From db48cbaed017491bc82bd0b32c9f24045d904421 Mon Sep 17 00:00:00 2001 From: Serg Creevanose Date: Sat, 27 Jan 2024 04:41:46 -0800 Subject: [PATCH] Add Valuable conversion to rational --- omnn/math/Fraction.cpp | 5 +++++ omnn/math/Fraction.h | 1 + omnn/math/Integer.cpp | 5 +++++ omnn/math/Integer.h | 1 + omnn/math/Product.cpp | 4 ++-- omnn/math/Valuable.cpp | 8 ++++++++ omnn/math/Valuable.h | 1 + 7 files changed, 23 insertions(+), 2 deletions(-) diff --git a/omnn/math/Fraction.cpp b/omnn/math/Fraction.cpp index 4dbfec947..e42aba20b 100644 --- a/omnn/math/Fraction.cpp +++ b/omnn/math/Fraction.cpp @@ -519,6 +519,11 @@ std::pair Fraction::IsSummationSimplifiable(const Valuable& v) co return static_cast(numerator()) / static_cast(denominator()); } + Fraction::operator a_rational() const + { + return static_cast(numerator()) / static_cast(denominator()); + } + Valuable& Fraction::sq(){ numerator().sq(); denominator().sq(); diff --git a/omnn/math/Fraction.h b/omnn/math/Fraction.h index c79d0190c..aaf153481 100644 --- a/omnn/math/Fraction.h +++ b/omnn/math/Fraction.h @@ -99,6 +99,7 @@ namespace math { explicit operator unsigned char() const override; explicit operator a_int() const override; + explicit operator a_rational() const override; operator boost::multiprecision::cpp_dec_float_100() const; Valuable operator()(const Variable&, const Valuable& augmentation) const override; static max_exp_t getMaxVaExp(const Valuable& _1, const Valuable& _2) { diff --git a/omnn/math/Integer.cpp b/omnn/math/Integer.cpp index f2813d6f3..91d64026e 100644 --- a/omnn/math/Integer.cpp +++ b/omnn/math/Integer.cpp @@ -269,6 +269,11 @@ namespace math { return boost::numeric_cast(arbitrary); } + Integer::operator a_rational() const + { + return boost::numeric_cast(arbitrary); + } + Integer::operator unsigned char() const { return boost::numeric_cast(arbitrary); diff --git a/omnn/math/Integer.h b/omnn/math/Integer.h index 0e8871166..2a5033113 100644 --- a/omnn/math/Integer.h +++ b/omnn/math/Integer.h @@ -135,6 +135,7 @@ class Integer explicit operator uint64_t() const override; explicit operator double() const override; explicit operator long double() const override; + explicit operator a_rational() const override; explicit operator uint32_t() const override; explicit operator unsigned char() const override; a_int& a() override; diff --git a/omnn/math/Product.cpp b/omnn/math/Product.cpp index 2f82fda73..74344bc89 100644 --- a/omnn/math/Product.cpp +++ b/omnn/math/Product.cpp @@ -123,10 +123,10 @@ namespace math { if (!e.IsInt()) { IMPLEMENT } - auto wasMax = maxVaExp == max_exp_t(e.ca(), 1); + auto wasMax = maxVaExp == static_cast(e); e += exponentiation; - auto isMax = maxVaExp < e.ca(); + auto isMax = maxVaExp < static_cast(e); if (isMax) { maxVaExp = e.ca(); } diff --git a/omnn/math/Valuable.cpp b/omnn/math/Valuable.cpp index a6bad142f..0981be99b 100644 --- a/omnn/math/Valuable.cpp +++ b/omnn/math/Valuable.cpp @@ -2173,6 +2173,14 @@ bool Valuable::SerializedStrEqual(const std::string_view& s) const { IMPLEMENT } + Valuable::operator a_rational() const + { + if (exp) + return exp->operator a_rational(); + else + IMPLEMENT + } + Valuable::operator uint32_t() const { if (exp) diff --git a/omnn/math/Valuable.h b/omnn/math/Valuable.h index 0dd516b78..4690a4a55 100644 --- a/omnn/math/Valuable.h +++ b/omnn/math/Valuable.h @@ -447,6 +447,7 @@ class Valuable virtual explicit operator uint64_t() const; virtual explicit operator double() const; virtual explicit operator long double() const; + virtual explicit operator a_rational() const; virtual explicit operator uint32_t() const; virtual explicit operator unsigned char() const; virtual a_int& a();