* Implementation of GiNaC's symbolic exponentiation (basis^exponent). */
/*
- * GiNaC Copyright (C) 1999-2003 Johannes Gutenberg University Mainz, Germany
+ * GiNaC Copyright (C) 1999-2004 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
ex power::map(map_function & f) const
{
- return (new power(f(basis), f(exponent)))->setflag(status_flags::dynallocated);
+ const ex &mapped_basis = f(basis);
+ const ex &mapped_exponent = f(exponent);
+
+ if (!are_ex_trivially_equal(basis, mapped_basis)
+ || !are_ex_trivially_equal(exponent, mapped_exponent))
+ return (new power(mapped_basis, mapped_exponent))->setflag(status_flags::dynallocated);
+ else
+ return *this;
}
int power::degree(const ex & s) const
return inherited::eval_ncmul(v);
}
+ex power::conjugate() const
+{
+ ex newbasis = basis.conjugate();
+ ex newexponent = exponent.conjugate();
+ if (are_ex_trivially_equal(basis, newbasis) && are_ex_trivially_equal(exponent, newexponent)) {
+ return *this;
+ }
+ return (new power(newbasis, newexponent))->setflag(status_flags::dynallocated);
+}
+
// protected
/** Implementation of ex::diff() for a power.