From 0c61e74675d8495f92fdb2ed51ef58dd24a24f30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89milie=20Feral?= Date: Thu, 3 May 2018 16:47:57 +0200 Subject: [PATCH] [poincare] Evaluation: force 0 imaginary/real parts to be 0 and not -0 to avoid using two differents conventions on branch cuts --- poincare/include/poincare/evaluation.h | 11 +++++++++-- poincare/src/evaluation.cpp | 6 ++++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/poincare/include/poincare/evaluation.h b/poincare/include/poincare/evaluation.h index fce94bd05..59bdd0f07 100644 --- a/poincare/include/poincare/evaluation.h +++ b/poincare/include/poincare/evaluation.h @@ -41,8 +41,15 @@ using ComplexFunction = std::complex (*)(const std::complex&); template class Complex : public std::complex, public Evaluation { public: - Complex(T a, T b = -0.0) : std::complex(a, b) {} - Complex(std::complex c) : std::complex(c) {} + Complex(T a, T b = 0.0) : std::complex(a, b) {} + Complex(std::complex c) : std::complex(c) { + if (this->real() == -0) { + this->real(0); + } + if (this->imag() == -0) { + this->imag(0); + } + } static Complex Undefined() { return Complex(NAN, NAN); } diff --git a/poincare/src/evaluation.cpp b/poincare/src/evaluation.cpp index 37754eefc..a65477ddd 100644 --- a/poincare/src/evaluation.cpp +++ b/poincare/src/evaluation.cpp @@ -72,6 +72,12 @@ MatrixComplex::MatrixComplex(std::complex * operands, int numberOfRows, in m_operands = new std::complex [numberOfRows*numberOfColumns]; for (int i=0; i