20#ifndef INCLUDE_COMPLEX_TYPE_HPP
21#define INCLUDE_COMPLEX_TYPE_HPP
77 inline operator T()
const {
return static_cast<T
>(
c_.real()); }
78 inline operator bool()
const {
return (
c_ != 0.0); }
83 std::complex<double>
c_;
97 #define complex_define_inequalities(Type) \
98 inline complex_t operator+ (const Type& r0, const complex_t& r1) { return complex_t(r0 + r1.c_); } \
99 inline complex_t operator- (const Type& r0, const complex_t& r1) { return complex_t(r0 - r1.c_); } \
100 inline complex_t operator* (const Type& r0, const complex_t& r1) { return complex_t(r0 * r1.c_); } \
101 inline complex_t operator/ (const Type& r0, const complex_t& r1) { return complex_t(r0 / r1.c_); } \
102 inline bool operator==(const Type& r0, const complex_t& r1) { return (r0 == r1.c_); } \
103 inline bool operator!=(const Type& r0, const complex_t& r1) { return (r0 != r1.c_); } \
104 inline complex_t operator+ (const complex_t& r0, const Type& r1) { return complex_t(r0.c_ + r1); } \
105 inline complex_t operator- (const complex_t& r0, const Type& r1) { return complex_t(r0.c_ - r1); } \
106 inline complex_t operator* (const complex_t& r0, const Type& r1) { return complex_t(r0.c_ * r1); } \
107 inline complex_t operator/ (const complex_t& r0, const Type& r1) { return complex_t(r0.c_ / r1); } \
122 static const bool is_specialized =
true;
132 static const int digits = std::numeric_limits<double>::digits;
133 static const int digits10 = std::numeric_limits<double>::digits10;
134 static const int radix = std::numeric_limits<double>::radix;
135 static const int min_exponent = std::numeric_limits<double>::min_exponent;
136 static const int min_exponent10 = std::numeric_limits<double>::min_exponent10;
137 static const int max_exponent = std::numeric_limits<double>::max_exponent;
138 static const int max_exponent10 = std::numeric_limits<double>::max_exponent10;
139 static const bool has_infinity = std::numeric_limits<double>::has_infinity;
140 static const bool has_quiet_NaN = std::numeric_limits<double>::has_quiet_NaN;
141 static const bool has_signaling_NaN = std::numeric_limits<double>::has_signaling_NaN;
142 static const bool has_denorm_loss = std::numeric_limits<double>::has_denorm_loss;
143 static const bool is_signed = std::numeric_limits<double>::is_signed;
144 static const bool is_integer = std::numeric_limits<double>::is_integer;
145 static const bool is_exact = std::numeric_limits<double>::is_exact;
146 static const bool is_iec559 = std::numeric_limits<double>::is_iec559;
147 static const bool is_bounded = std::numeric_limits<double>::is_bounded;
148 static const bool is_modulo = std::numeric_limits<double>::is_modulo;
149 static const bool traps = std::numeric_limits<double>::traps;
150 static const float_denorm_style has_denorm = std::numeric_limits<double>::has_denorm;
151 static const float_round_style round_style = std::numeric_limits<double>::round_style;
251 return complex_t(std::numeric_limits<double>::quiet_NaN());
270 return sqrt((v0 * v0) + (v1 * v1));
302 const bool v0_true =
is_true(v0);
303 const bool v1_true =
is_true(v1);
304 if ((v0_true && v1_true) || (!v0_true && !v1_true))
static number_complex_t denorm_min()
static number_complex_t round_error()
static number_complex_t lowest()
static number_complex_t quiet_NaN()
static number_complex_t infinity()
static number_complex_t epsilon()
complex_t number_complex_t
static number_complex_t signaling_NaN()
#define complex_define_inequalities(Type)
static const complex_t sqrt2
static const complex_t _180_pi
static const complex_t pi_2
static const complex_t pi_4
static const complex_t pi_180
static const complex_t _2_pi
static const complex_t log2
static const complex_t pi
static const complex_t _1_pi
complex_t log(const complex_t v)
complex_t cosh(const complex_t v)
complex_t expm1(const complex_t vx)
bool operator<=(const complex_t c0, const complex_t c1)
complex_t floor(const complex_t v)
complex_t shl(const complex_t v0, const complex_t v1)
complex_t modulus(const complex_t v0, const complex_t v1)
complex_t sinh(const complex_t v)
complex_t r2d(const complex_t v)
bool operator>=(const complex_t c0, const complex_t c1)
complex_t abs(const complex_t v)
complex_t asin(const complex_t v)
complex_t nequal(const complex_t v0, const complex_t v1)
complex_t tanh(const complex_t v)
complex_t root(const complex_t v0, const complex_t v1)
complex_t tan(const complex_t v)
complex_t operator+(const complex_t r0, const complex_t r1)
complex_t round(const complex_t v)
complex_t frac(const complex_t v)
complex_t min(const complex_t v0, const complex_t v1)
complex_t csc(const complex_t v)
complex_t operator-(const complex_t r0, const complex_t r1)
complex_t operator*(const complex_t r0, const complex_t r1)
complex_t d2g(const complex_t v)
complex_t erfc(complex_t v)
complex_t sgn(const complex_t v)
complex_t trunc(const complex_t v)
complex_t d2r(const complex_t v)
bool operator>(const complex_t c0, const complex_t c1)
complex_t atan2(const complex_t v0, const complex_t v1)
complex_t exp(const complex_t v)
complex_t log1p(const complex_t v)
complex_t sin(const complex_t v)
complex_t operator/(const complex_t r0, const complex_t r1)
complex_t nand(const complex_t v0, const complex_t &v1)
complex_t atan(const complex_t v)
complex_t max(const complex_t v0, const complex_t v1)
complex_t ceil(const complex_t v)
complex_t g2d(const complex_t v)
bool operator<(const complex_t c0, const complex_t c1)
complex_t pos(const complex_t v)
complex_t notl(const complex_t v)
complex_t sqrt(const complex_t v)
complex_t roundn(const complex_t v0, const complex_t v1)
complex_t acos(const complex_t v)
complex_t logn(const complex_t v0, const complex_t v1)
complex_t neg(const complex_t v)
bool is_false(const complex_t v)
complex_t equal(const complex_t v0x, const complex_t v1x)
complex_t shr(const complex_t v0, const complex_t v1)
bool is_true(const complex_t v)
complex_t sec(const complex_t v)
complex_t log10(const complex_t v)
complex_t pow(const complex_t v0, const complex_t v1)
complex_t log2(const complex_t v)
complex_t xnor(const complex_t v0, const complex_t &v1)
complex_t cos(const complex_t v)
complex_t cot(const complex_t v)
complex_t nor(const complex_t v0, const complex_t &v1)
complex_t hypot(const complex_t v0, const complex_t v1)
bool operator==(const complex_t &r) const
complex_t(const complex_t &d)
complex_t(const double &real, const double &imag)
complex_t & operator=(const double &d)
std::complex< double > c_
complex_t & operator*=(const complex_t &r)
complex_t operator--(int)
bool operator!=(const complex_t &r) const
complex_t & operator-=(const complex_t &r)
complex_t operator++(int)
std::complex< double > value_type
complex_t operator-() const
complex_t & operator/=(const complex_t &r)
complex_t & operator+=(const complex_t &r)
complex_t & operator=(const T d)
complex_t(const value_type &v)