diff --git a/poincare/include/poincare/integer.h b/poincare/include/poincare/integer.h index 7140ccd80..88bea3c6b 100644 --- a/poincare/include/poincare/integer.h +++ b/poincare/include/poincare/integer.h @@ -125,8 +125,10 @@ public: bool isZero() const { return (numberOfDigits() == 0); }; bool isEven() const { return ((digit(0) & 1) == 0); } - constexpr static int k_maxExtractableInteger = 0x7FFFFFFF; - int extractedInt() const { assert(numberOfDigits() == 0 || (numberOfDigits() <= 1 && digit(0) <= k_maxExtractableInteger)); return numberOfDigits() == 0 ? 0 : (m_negative ? -digit(0) : digit(0)); } + bool isExtractable() const { + return numberOfDigits() == 0 || (numberOfDigits() <= 1 && digit(0) <= k_maxExtractableInteger); + } + int extractedInt() const { assert(isExtractable()); return numberOfDigits() == 0 ? 0 : (m_negative ? -digit(0) : digit(0)); } // Comparison static int NaturalOrder(const Integer & i, const Integer & j); @@ -152,6 +154,7 @@ public: constexpr static int k_maxNumberOfDigits = 32; private: constexpr static int k_maxNumberOfDigitsBase10 = 308; // (2^32)^k_maxNumberOfDigits ~ 1E308 + constexpr static int k_maxExtractableInteger = 0x7FFFFFFF; // Constructors Integer(native_uint_t * digits, uint16_t numberOfDigits, bool negative); diff --git a/poincare/src/power.cpp b/poincare/src/power.cpp index 525e9a89f..d5913e835 100644 --- a/poincare/src/power.cpp +++ b/poincare/src/power.cpp @@ -73,7 +73,7 @@ int PowerNode::polynomialDegree(Context * context, const char * symbolName) cons return -1; } Integer numeratorInt = r->signedNumerator(); - if (Integer::NaturalOrder(numeratorInt, Integer(Integer::k_maxExtractableInteger)) > 0) { + if (!numeratorInt.isExtractable()) { return -1; } op0Deg *= numeratorInt.extractedInt(); @@ -360,7 +360,7 @@ int Power::getPolynomialCoefficients(Context * context, const char * symbolName, return -1; } Integer num = r.unsignedIntegerNumerator(); - if (Integer::NaturalOrder(num, Integer(Integer::k_maxExtractableInteger)) > 0) { + if (!num.isExtractable()) { return -1; } int n = num.extractedInt(); diff --git a/poincare/src/unit.cpp b/poincare/src/unit.cpp index d87346ef9..af9f77b4d 100644 --- a/poincare/src/unit.cpp +++ b/poincare/src/unit.cpp @@ -350,7 +350,7 @@ void Unit::ChooseBestMultipleForValue(Expression * units, double * value, bool t firstFactor = firstFactor.childAtIndex(0); assert(exp.type() == ExpressionNode::Type::Rational && static_cast(exp).isInteger()); Integer expInt = static_cast(exp).signedIntegerNumerator(); - if (expInt.isLowerThan(Integer(Integer::k_maxExtractableInteger))) { + if (expInt.isExtractable()) { exponent = expInt.extractedInt(); } else { // The exponent is too large to be extracted, so do not try to use it.