From 0736a3f55a64b6260777975decf053fc162910da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89milie=20Feral?= Date: Tue, 5 Nov 2019 11:42:20 +0100 Subject: [PATCH] [poincare] In Polar complex format, avoid displaying real expression as sqrt of square when possible --- poincare/src/complex_cartesian.cpp | 13 +++++-------- poincare/test/simplification.cpp | 6 ++++++ 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/poincare/src/complex_cartesian.cpp b/poincare/src/complex_cartesian.cpp index d196644e7..118b8bc9a 100644 --- a/poincare/src/complex_cartesian.cpp +++ b/poincare/src/complex_cartesian.cpp @@ -127,14 +127,11 @@ Expression ComplexCartesian::norm(ExpressionNode::ReductionContext reductionCont a = imag(); } if (!a.isUninitialized()) { - ExpressionNode::Sign s = a.sign(reductionContext.context()); - if (s == ExpressionNode::Sign::Positive) { - // Case 1: the expression is positive real - return a; - } else if (s == ExpressionNode::Sign::Negative) { - // Case 2: the argument is negative real - return a.setSign(ExpressionNode::Sign::Positive, reductionContext); - } + // norm = sign(a) * a + Expression signa = SignFunction::Builder(a.clone()); + Expression norm = Multiplication::Builder(a, signa); + signa.shallowReduce(reductionContext); + return norm; } Expression n2 = squareNorm(reductionContext); Expression n = SquareRoot::Builder(n2); diff --git a/poincare/test/simplification.cpp b/poincare/test/simplification.cpp index af762a414..23e1820aa 100644 --- a/poincare/test/simplification.cpp +++ b/poincare/test/simplification.cpp @@ -801,6 +801,8 @@ QUIZ_CASE(poincare_simplification_complex_format) { assert_parsed_expression_simplify_to("(-8)^(1/4)", "unreal", User, Radian, Real); assert_parsed_expression_simplify_to("(-8)^(1/3)", "-2", User, Radian, Real); assert_parsed_expression_simplify_to("[[1,2+√(-1)]]", "unreal", User, Radian, Real); + assert_parsed_expression_simplify_to("atan(2)", "atan(2)", User, Radian, Real); + assert_parsed_expression_simplify_to("atan(-2)", "-atan(2)", User, Radian, Real); // User defined variable assert_parsed_expression_simplify_to("a", "a", User, Radian, Real); @@ -844,6 +846,8 @@ QUIZ_CASE(poincare_simplification_complex_format) { assert_parsed_expression_simplify_to("π", "π", User, Radian, Cartesian); assert_parsed_expression_simplify_to("𝐢", "𝐢", User, Radian, Cartesian); + assert_parsed_expression_simplify_to("atan(2)", "atan(2)", User, Radian, Cartesian); + assert_parsed_expression_simplify_to("atan(-2)", "-atan(2)", User, Radian, Cartesian); assert_parsed_expression_simplify_to("abs(-3)", "3", User, Radian, Cartesian); assert_parsed_expression_simplify_to("abs(-3+𝐢)", "√(10)", User, Radian, Cartesian); assert_parsed_expression_simplify_to("atan(2)", "atan(2)", User, Radian, Cartesian); @@ -934,6 +938,8 @@ QUIZ_CASE(poincare_simplification_complex_format) { assert_parsed_expression_simplify_to("conj(2×ℯ^(𝐢×π/2))", "2×ℯ^\u0012-π/2×𝐢\u0013", User, Radian, Polar); assert_parsed_expression_simplify_to("-2×ℯ^(𝐢×π/2)", "2×ℯ^\u0012-π/2×𝐢\u0013", User, Radian, Polar); assert_parsed_expression_simplify_to("[[1,√(-1)]]", "[[1,ℯ^\u0012π/2×𝐢\u0013]]", User, Radian, Polar); + assert_parsed_expression_simplify_to("atan(2)", "atan(2)", User, Radian, Polar); + assert_parsed_expression_simplify_to("atan(-2)", "atan(2)×ℯ^\u0012π×𝐢\u0013", User, Radian, Polar); // User defined variable assert_parsed_expression_simplify_to("a", "a", User, Radian, Polar);