[poincare] In Polar complex format, avoid displaying real expression as

sqrt of square when possible
This commit is contained in:
Émilie Feral
2019-11-05 11:42:20 +01:00
committed by EmilieNumworks
parent e8046ddb9a
commit 0736a3f55a
2 changed files with 11 additions and 8 deletions

View File

@@ -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);

View File

@@ -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);