This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug libstdc++/61761] [C++11] std::proj returns incorrect values


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61761

Jonathan Wakely <redi at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2015-04-09
     Ever confirmed|0                           |1
           Severity|normal                      |minor

--- Comment #1 from Jonathan Wakely <redi at gcc dot gnu.org> ---
I suppose something like this isn't usable because it won't work unless _Tp is
float, double or long double:

--- a/libstdc++-v3/include/std/complex
+++ b/libstdc++-v3/include/std/complex
@@ -1887,11 +1887,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     std::complex<_Tp>
     __complex_proj(const std::complex<_Tp>& __z)
     {
-      const _Tp __den = (__z.real() * __z.real()
-                        + __z.imag() * __z.imag() + _Tp(1.0));
-
-      return std::complex<_Tp>((_Tp(2.0) * __z.real()) / __den,
-                              (_Tp(2.0) * __z.imag()) / __den);
+      if (isinf(__z.real()) || isinf(__z.imag())
+         || isnan(__z.real()) || isnan(__z.imag()))
+       return std::complex<_Tp>(INFINITY, copysign(0.0, __z.imag()));
+      return __z;
     }

 #if _GLIBCXX_USE_C99_COMPLEX


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]