From ae1aa5ee144e61d3d92fd4bf22d84d89f2ee4c42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89milie=20Feral?= Date: Fri, 3 Aug 2018 11:38:21 +0200 Subject: [PATCH] [poincare] Fix Rational::NaturalOrder --- poincare/src/rational.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/poincare/src/rational.cpp b/poincare/src/rational.cpp index b394678ec..0242378ba 100644 --- a/poincare/src/rational.cpp +++ b/poincare/src/rational.cpp @@ -109,13 +109,19 @@ template T RationalNode::templatedApproximate() const { // Comparison int RationalNode::NaturalOrder(const RationalNode i, const RationalNode j) { + if (i.sign() == Sign::Negative && j.sign() == Sign::Positive) { + return -1; + } + if (i.sign() == Sign::Positive && j.sign() == Sign::Negative) { + return 1; + } NaturalIntegerPointer in = i.numerator(); NaturalIntegerPointer id = i.denominator(); NaturalIntegerPointer jn = j.numerator(); NaturalIntegerPointer jd = j.denominator(); IntegerReference i1 = NaturalIntegerAbstract::umult(&in, &jd); IntegerReference i2 = NaturalIntegerAbstract::umult(&id, &jn); - return IntegerReference::NaturalOrder(i1, i2); + return ((int)i.sign())*IntegerReference::NaturalOrder(i1, i2); } int RationalNode::simplificationOrderSameType(const ExpressionNode * e, bool canBeInterrupted) const {