Be more careful when simplifying Re(a^c) -> a^c and Im(a^c) -> 0.
Thanks to Jan Rheinländer for reporting this.
// basis == a+I*b, exponent == c+I*d
const ex a = basis.real_part();
const ex c = exponent.real_part();
// basis == a+I*b, exponent == c+I*d
const ex a = basis.real_part();
const ex c = exponent.real_part();
- if (basis.is_equal(a) && exponent.is_equal(c)) {
+ if (basis.is_equal(a) && exponent.is_equal(c) &&
+ (a.info(info_flags::nonnegative) || c.info(info_flags::integer))) {
// Re(a^c)
return *this;
}
// Re(a^c)
return *this;
}
// basis == a+I*b, exponent == c+I*d
const ex a = basis.real_part();
const ex c = exponent.real_part();
// basis == a+I*b, exponent == c+I*d
const ex a = basis.real_part();
const ex c = exponent.real_part();
- if (basis.is_equal(a) && exponent.is_equal(c)) {
+ if (basis.is_equal(a) && exponent.is_equal(c) &&
+ (a.info(info_flags::nonnegative) || c.info(info_flags::integer))) {