]> www.ginac.de Git - ginac.git/blobdiff - ginac/numeric.cpp
fixed a problem in the LaTeX-output of negative fractions
[ginac.git] / ginac / numeric.cpp
index 858cbbd578ee0ba2fd332876249ddef43e8c026a..a3872b96650b9843505126cce338757ade54169a 100644 (file)
@@ -322,8 +322,10 @@ static void print_real_number(const print_context & c, const cln::cl_R &x)
                    !is_a<print_latex>(c)) {
                        cln::print_real(c.s, ourflags, x);
                } else {  // rational output in LaTeX context
+                       if (x < 0)
+                               c.s << "-";
                        c.s << "\\frac{";
-                       cln::print_real(c.s, ourflags, cln::numerator(cln::the<cln::cl_RA>(x)));
+                       cln::print_real(c.s, ourflags, cln::abs(cln::numerator(cln::the<cln::cl_RA>(x))));
                        c.s << "}{";
                        cln::print_real(c.s, ourflags, cln::denominator(cln::the<cln::cl_RA>(x)));
                        c.s << '}';
@@ -359,7 +361,12 @@ void numeric::print(const print_context & c, unsigned level) const
                        c.s.precision(16);
                else
                        c.s.precision(7);
-               if (this->is_rational() && !this->is_integer()) {
+               if (is_a<print_csrc_cl_N>(c) && this->is_integer()) {
+                       c.s << "cln::cl_I(\"";
+                       const cln::cl_R r = cln::realpart(cln::the<cln::cl_N>(value));
+                       print_real_number(c,r);
+                       c.s << "\")";
+               } else if (this->is_rational() && !this->is_integer()) {
                        if (compare(_num0) > 0) {
                                c.s << "(";
                                if (is_a<print_csrc_cl_N>(c))
@@ -381,7 +388,7 @@ void numeric::print(const print_context & c, unsigned level) const
                        c.s << ")";
                } else {
                        if (is_a<print_csrc_cl_N>(c))
-                               c.s << "cln::cl_F(\"" << evalf() << "\")";
+                               c.s << "cln::cl_F(\"" << evalf() << "_" << Digits << "\")";
                        else
                                c.s << to_double();
                }