diff --git a/poincare/include/poincare/rational.h b/poincare/include/poincare/rational.h index 9cf67a8ec..a79f485d0 100644 --- a/poincare/include/poincare/rational.h +++ b/poincare/include/poincare/rational.h @@ -39,8 +39,9 @@ public: private: ExpressionLayout * privateCreateLayout(FloatDisplayMode floatDisplayMode, ComplexFormat complexFormat) const override; int writeTextInBuffer(char * buffer, int bufferSize) const override; - Evaluation * privateEvaluate(SinglePrecision p, Context& context, AngleUnit angleUnit) const override; - Evaluation * privateEvaluate(DoublePrecision p, Context& context, AngleUnit angleUnit) const override; + Evaluation * privateEvaluate(SinglePrecision p, Context& context, AngleUnit angleUnit) const override { return templatedEvaluate(context, angleUnit); } + Evaluation * privateEvaluate(DoublePrecision p, Context& context, AngleUnit angleUnit) const override { return templatedEvaluate(context, angleUnit); } + template Evaluation * templatedEvaluate(Context& context, Expression::AngleUnit angleUnit) const; /* Sorting */ int compareToSameTypeExpression(const Expression * e) const override; diff --git a/poincare/src/rational.cpp b/poincare/src/rational.cpp index f82acd23a..bddd42d3e 100644 --- a/poincare/src/rational.cpp +++ b/poincare/src/rational.cpp @@ -104,14 +104,10 @@ int Rational::compareToSameTypeExpression(const Expression * e) const { return i1.compareTo(&i2); } -Evaluation * Rational::privateEvaluate(SinglePrecision p, Context& context, AngleUnit angleUnit) const { - // TODO: implement when needed, use Integer.privateEvaluate - return new Complex(Complex::Float(NAN)); -} - -Evaluation * Rational::privateEvaluate(DoublePrecision p, Context& context, AngleUnit angleUnit) const { - // TODO: implement when needed, use Integer.privateEvaluate - return new Complex(Complex::Float(NAN)); +template Evaluation * Rational::templatedEvaluate(Context& context, Expression::AngleUnit angleUnit) const { + T n = m_numerator.approximate(); + T d = m_denominator.approximate(); + return new Complex(Complex::Float(n/d)); } ExpressionLayout * Rational::privateCreateLayout(FloatDisplayMode floatDisplayMode, ComplexFormat complexFormat) const {