https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61849
Bug ID: 61849 Summary: exp(NaN+0_i) returns wrong value Product: gcc Version: 4.9.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: libstdc++ Assignee: unassigned at gcc dot gnu.org Reporter: bolero.murakami at gmail dot com exp(NaN+0_i) returns NaN+NaN_i. However, it should returns NaN+0_i correctly. ISO/IEC 9899:1999 G.6.3.1 The cexp functions — cexp(NaN + i0) returns NaN + i0. Code: //-------- #include <complex> #include <limits> #include <iostream> int main() { using complex = std::complex<double>; auto NaN = std::numeric_limits<double>::quiet_NaN(); // should be (nan,0), but (nan,nan) std::cout << std::exp(complex(NaN, +0.)) << std::endl; // should be (nan,-0), but (nan,nan) std::cout << std::exp(complex(NaN, -0.)) << std::endl; } //-------- http://melpon.org/wandbox/permlink/asWdib1m9tY4zICI