24 template <
typename C1,
typename C2>
auto operator * (std::complex<C1> a, std::complex<C2> b) -> std::complex<decltype(C1(0.)*C2(0.))>
26 typedef decltype(C1(0.) * C2(0.)) T;
27 return std::complex<T>(a) * std::complex<T>(b);
29 template <
typename C1,
typename C2>
auto operator / (std::complex<C1> a, std::complex<C2> b) -> std::complex<decltype(C1(0.)/C2(0.))>
31 typedef decltype(C1(0.) * C2(0.)) T;
32 return std::complex<T>(a) / std::complex<T>(b);
38 return z.real() * z.real() + z.imag() * z.imag();
44 return a.real() < b.real();
50 return a.imag() < b.imag();
56 return std::isfinite(z.real()) and std::isfinite(z.imag());
NumberArray< double > sqrabs(NumberArray< Complex > const &A)
Return per-element square of absolute value.
Definition: arrays.cpp:71
bool Complex_imagpart_less(Complex const &a, Complex const &b)
Complex ordering by imaginary parts.
Definition: complex.h:48
auto operator/(std::complex< C1 > a, std::complex< C2 > b) -> std::complex< decltype(C1(0.)/C2(0.))>
Definition: complex.h:29
auto operator*(std::complex< C1 > a, std::complex< C2 > b) -> std::complex< decltype(C1(0.)*C2(0.))>
Definition: complex.h:24
bool Complex_finite(Complex const &z)
Finite check for complex number.
Definition: complex.h:54
bool Complex_realpart_less(Complex const &a, Complex const &b)
Complex ordering by real parts.
Definition: complex.h:42
std::complex< double > Complex
Definition: complex.h:20
std::complex< long double > LComplex
Definition: complex.h:21