From 857ca4eecd158bb1f3adb2509dd393907a688bc2 Mon Sep 17 00:00:00 2001 From: Gabriel Ozouf Date: Tue, 29 Sep 2020 11:21:11 +0200 Subject: [PATCH] [poincare/trigonometry] Fix wrong use of pi MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In Trigonometry::shallowReduceInverseFunction, the reduction of atan(1/x) used the hard value of pi instead of its equivalent in the selected angle unit. This fixes a bug causing atan(1/tan(40°)) to be equal to π/2-40 instead of 50. Change-Id: Ifd7df5cd168fadf3146eee168c0bc2136ea15a7b --- poincare/src/trigonometry.cpp | 4 +++- poincare/test/simplification.cpp | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/poincare/src/trigonometry.cpp b/poincare/src/trigonometry.cpp index 209aebcc7..a3eb84177 100644 --- a/poincare/src/trigonometry.cpp +++ b/poincare/src/trigonometry.cpp @@ -331,14 +331,16 @@ Expression Trigonometry::shallowReduceInverseFunction(Expression & e, Expression * reduced to undef) */ if (reductionContext.target() == ExpressionNode::ReductionTarget::User || x.isNumber()) { Expression sign = SignFunction::Builder(x.clone()); - Multiplication m0 = Multiplication::Builder(Rational::Builder(1,2), sign, Constant::Builder(UCodePointGreekSmallLetterPi)); + Multiplication m0 = Multiplication::Builder(Rational::Builder(1,2), sign, piExpression(angleUnit)); sign.shallowReduce(reductionContext); e.replaceChildAtIndexInPlace(0, x); Addition a = Addition::Builder(m0); + m0.shallowReduce(reductionContext); e.replaceWithInPlace(a); Multiplication m1 = Multiplication::Builder(Rational::Builder(-1), e); e.shallowReduce(reductionContext); a.addChildAtIndexInPlace(m1, 1, 1); + m1.shallowReduce(reductionContext); return a.shallowReduce(reductionContext); } } diff --git a/poincare/test/simplification.cpp b/poincare/test/simplification.cpp index dcac131d5..51debe5b5 100644 --- a/poincare/test/simplification.cpp +++ b/poincare/test/simplification.cpp @@ -948,7 +948,9 @@ QUIZ_CASE(poincare_simplification_trigonometry_functions) { assert_parsed_expression_simplify_to("atan(tan(1808))", "8", User, Degree); assert_parsed_expression_simplify_to("atan(tan(-180/7))", "-180/7", User, Degree); assert_parsed_expression_simplify_to("atan(√(3))", "60", User, Degree); - assert_parsed_expression_simplify_to("atan(1/x)", "\u0012π×sign(x)-2×atan(x)\u0013/2", User, Degree); + assert_parsed_expression_simplify_to("atan(1/x)", "\u0012π×sign(x)-2×atan(x)\u0013/2"); + assert_parsed_expression_simplify_to("atan(1/x)", "90×sign(x)-atan(x)", User, Degree); + assert_parsed_expression_simplify_to("atan(1/x)", "100×sign(x)-atan(x)", User, Gradian); // cos(asin) assert_parsed_expression_simplify_to("cos(asin(x))", "√(-x^2+1)", User, Degree);