mirror of
https://gcc.gnu.org/git/gcc.git
synced 2024-11-30 07:14:09 +08:00
re PR libstdc++/10689 (pow(std::complex(0),1/3) returns (nan, nan) instead of 0.)
PR libstdc++/10689 * include/std/std_complex.h (pow): Tidy From-SVN: r66989
This commit is contained in:
parent
29ad6d3f11
commit
1db0418ae5
@ -1,3 +1,8 @@
|
||||
2003-05-20 Gabriel Dos Reis <gdr@integrable-solutions.net>
|
||||
|
||||
PR libstdc++/10689
|
||||
* include/std/std_complex.h (pow): Tidy.
|
||||
|
||||
2003-05-19 Paolo Carlini <pcarlini@unitus.it>
|
||||
|
||||
* testsuite/27_io/basic_filebuf/close/char/4.cc: New file, testing
|
||||
|
@ -565,24 +565,30 @@ namespace std
|
||||
}
|
||||
|
||||
template<typename _Tp>
|
||||
inline complex<_Tp>
|
||||
complex<_Tp>
|
||||
pow(const complex<_Tp>& __x, const _Tp& __y)
|
||||
{
|
||||
return exp(__y * log(__x));
|
||||
if (__x.imag() == _Tp())
|
||||
return pow(__x.real(), __y);
|
||||
|
||||
complex<_Tp> __t = log(__x);
|
||||
return polar(exp(__y * __t.real()), __y * __t.imag());
|
||||
}
|
||||
|
||||
template<typename _Tp>
|
||||
inline complex<_Tp>
|
||||
pow(const complex<_Tp>& __x, const complex<_Tp>& __y)
|
||||
{
|
||||
return exp(__y * log(__x));
|
||||
return __x == _Tp() ? _Tp() : exp(__y * log(__x));
|
||||
}
|
||||
|
||||
template<typename _Tp>
|
||||
inline complex<_Tp>
|
||||
pow(const _Tp& __x, const complex<_Tp>& __y)
|
||||
{
|
||||
return exp(__y * log(__x));
|
||||
return __x == _Tp()
|
||||
? _Tp()
|
||||
: polar(pow(__x, __y.real()), __y.imag() * log(__x));
|
||||
}
|
||||
|
||||
// 26.2.3 complex specializations
|
||||
|
14
libstdc++-v3/testsuite/26_numerics/complex/pow.C
Normal file
14
libstdc++-v3/testsuite/26_numerics/complex/pow.C
Normal file
@ -0,0 +1,14 @@
|
||||
// PR libbstdc++/10689
|
||||
// Origin: Daniel.Levine@jhuaph.edu
|
||||
|
||||
#include <complex>
|
||||
#include <testsuite_hooks.h>
|
||||
|
||||
int main()
|
||||
{
|
||||
std::complex<double> z(0, 1) ;
|
||||
|
||||
VERIFY(pow(z, 1.0/3.0) == 0.0);
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue
Block a user