http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56106
Bug #: 56106 Summary: complex pow improvements Classification: Unclassified Product: gcc Version: 4.8.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: libstdc++ AssignedTo: unassig...@gcc.gnu.org ReportedBy: gli...@gcc.gnu.org See this discussion for more details: http://gcc.gnu.org/ml/libstdc++/2013-01/msg00058.html Several improvements seem possible. 1) in pow(const complex<_Tp>& __x, const _Tp& __y), if _GLIBCXX_USE_C99_COMPLEX && !_GLIBCXX_FAST_MATH, we could convert y to a complex and call the libc version, more accurate than chaining several calls. (I mention _GLIBCXX_FAST_MATH assuming that the version with polar, exp and log is faster than the general libc version, I don't know if that is really the case) 2) among the pow(complex,scalar) overloads, those for which scalar is an integer could be split out and implemented with recursive squaring (as currently done in C++03 mode for int only). Note that when the exponent is not -1, 0, 1 or 2, this might also require _GLIBCXX_FAST_MATH || !_GLIBCXX_USE_C99_COMPLEX as it may not give anymore the correctly rounded result. Note that the libc version may already test for real or small integer arguments, so we can't expect a huge performance benefit from not calling it in these cases.