diff --git a/poincare/include/poincare/decimal.h b/poincare/include/poincare/decimal.h index 90e58005b..60b7e69ba 100644 --- a/poincare/include/poincare/decimal.h +++ b/poincare/include/poincare/decimal.h @@ -53,6 +53,9 @@ public: } // Comparison + /* Warning: Decimal(mantissa: 1000, exponent: 3) and Decimal(mantissa: 1, exponent: 3) + * are strictly ordered with the SimplificationOrder although they are equal + * with the usual math order (1.000E3 == 1E3). */ int simplificationOrderSameType(const ExpressionNode * e, bool ascending, bool canBeInterrupted) const override; // Simplification diff --git a/poincare/src/decimal.cpp b/poincare/src/decimal.cpp index 5fb7ef0e2..62c72ecb9 100644 --- a/poincare/src/decimal.cpp +++ b/poincare/src/decimal.cpp @@ -81,9 +81,7 @@ int DecimalNode::simplificationOrderSameType(const ExpressionNode * e, bool asce } else { assert(m_exponent == other->m_exponent); assert(exponent() == other->exponent()); - double approx0 = templatedApproximate(); - double approx1 = other->templatedApproximate(); - return (approx0 == approx1 ? 0 : (approx0 < approx1 ? -1 : 1)); + unsignedComparison = Integer::NaturalOrder(unsignedMantissa(), other->unsignedMantissa()); } return ((int)Number(this).sign())*unsignedComparison; } diff --git a/poincare/test/expression.cpp b/poincare/test/expression.cpp index a7c69f080..a18c0bf5a 100644 --- a/poincare/test/expression.cpp +++ b/poincare/test/expression.cpp @@ -48,8 +48,9 @@ QUIZ_CASE(poincare_expression_decimal_constructor) { assert_pool_size(initialPoolSize+4); assert_equal(Decimal::Builder("25", 3), Decimal::Builder("25", 3)); - assert_equal(Decimal::Builder("1000", -3), Decimal::Builder("1", -3)); - assert_equal(Decimal::Builder("1000", 3), Decimal::Builder("1", 3)); + assert_equal(Decimal::Builder("25", 3), Decimal::Builder(25, 3)); + assert_not_equal(Decimal::Builder("1000", -3), Decimal::Builder("1", -3)); + assert_not_equal(Decimal::Builder("1000", 3), Decimal::Builder("1", 3)); assert_not_equal(Decimal::Builder(123,234), Decimal::Builder(42, 108)); assert_not_equal(Decimal::Builder(12,2), Decimal::Builder(123, 2)); assert_not_equal(Decimal::Builder(1234,2), Decimal::Builder(1234,3));