* Implementation of GiNaC's symbolic exponentiation (basis^exponent). */
/*
- * GiNaC Copyright (C) 1999-2002 Johannes Gutenberg University Mainz, Germany
+ * GiNaC Copyright (C) 1999-2003 Johannes Gutenberg University Mainz, Germany
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
// Integer powers of symbols are printed in a special, optimized way
if (exponent.info(info_flags::integer)
- && (is_exactly_a<symbol>(basis) || is_exactly_a<constant>(basis))) {
+ && (is_a<symbol>(basis) || is_a<constant>(basis))) {
int exp = ex_to<numeric>(exponent).to_int();
if (exp > 0)
c.s << '(';
bool is_tex = is_a<print_latex>(c);
- if (exponent.is_equal(_ex1_2)) {
+ if (is_tex && is_exactly_a<numeric>(exponent) && ex_to<numeric>(exponent).is_negative()) {
+
+ // Powers with negative numeric exponents are printed as fractions in TeX
+ c.s << "\\frac{1}{";
+ power(basis, -exponent).eval().print(c);
+ c.s << "}";
+
+ } else if (exponent.is_equal(_ex1_2)) {
+
+ // Square roots are printed in a special way
c.s << (is_tex ? "\\sqrt{" : "sqrt(");
basis.print(c);
c.s << (is_tex ? '}' : ')');
+
} else {
+
+ // Ordinary output of powers using '^' or '**'
if (precedence() <= level)
c.s << (is_tex ? "{(" : "(");
basis.print(c, precedence());