20#ifndef EXPRTK_COMPLEX_ADAPTOR_HPP
21#define EXPRTK_COMPLEX_ADAPTOR_HPP
32 namespace numeric {
namespace details
34 struct complex_type_tag;
37 template <
typename T>
inline T const_e_impl (complex_type_tag);
43 template <
typename Iterator>
47 namespace rtl {
namespace io
85 return std::isnan(v.
c_.real()) || std::isnan(v.
c_.imag()) ;
124 template <
typename T>
127 return static_cast<int>(v);
130 template <
typename T>
133 return static_cast<long long int>(v);
136 template <
typename T>
139 return static_cast<unsigned long long int>(v);
152 template <
typename T>
155 if (
abs(v) <
T(0.00001))
156 return v + (
T(0.5) * v * v);
158 return exp(v) -
T(1);
161 template <
typename T>
169 template <
typename T>
172 if (v >
T(0))
return T(+1);
173 else if (v <
T(0))
return T(-1);
177 template <
typename T>
187 return (
T(-0.5) * v +
T(1)) * v;
190 return T(std::numeric_limits<T>::quiet_NaN());
193 template <
typename T>
198 static const T c[] = {
199 T( 1.26551223),
T(1.00002368),
200 T( 0.37409196),
T(0.09678418),
201 T(-0.18628806),
T(0.27886807),
202 T(-1.13520398),
T(1.48851587),
203 T(-0.82215223),
T(0.17087277)
207 c[0] + t * (c[1] + t *
208 (c[2] + t * (c[3] + t *
209 (c[4] + t * (c[5] + t *
210 (c[6] + t * (c[7] + t *
213 return (v >=
T(0)) ? result : -result;
216 template <
typename T>
222 template <
typename T>
228 return (v <
T(0)) ? (
T(1) -
cnd) :
cnd;
231 template <
typename T>
237 template <
typename T>
243 template <
typename T>
249 template <
typename T>
258 template <
typename T>
264 template <
typename T>
275 template <
typename T>
283 template <
typename T>
286 return ((v <
T(0)) ?
ceil(v -
T(0.5)) :
floor(v +
T(0.5)));
289 template <
typename T>
292 const int index = std::max<int>(0, std::min<int>(
pow10_size - 1, (
int)
floor(v1)));
300 template <
typename T>
306 template <
typename T>
309 return pow(v0,
T(1) / v1);
312 template <
typename T>
315 return sqrt((v0 * v0) + (v1 * v1));
318 template <
typename T>
324 template <
typename T>
327 return v0 * (
T(1) /
pow(
T(2),v1));
330 template <
typename T>
333 return v0 *
pow(
T(2),v1);
336 template <
typename T>
342 template <
typename T>
348 template <
typename T>
354 template <
typename T>
362 template <
typename Iterator>
378 namespace rtl {
namespace io
384 printf(fmt.c_str(),(
double)v.
c_.real(), (
double)v.
c_.imag());
static const complex_t pi
complex_t log(const complex_t v)
complex_t cosh(const complex_t v)
complex_t floor(const complex_t v)
complex_t sinh(const complex_t v)
complex_t abs(const complex_t v)
complex_t asin(const complex_t v)
complex_t tanh(const complex_t v)
complex_t tan(const complex_t v)
complex_t frac(const complex_t v)
complex_t trunc(const complex_t v)
complex_t atan2(const complex_t v0, const complex_t v1)
complex_t exp(const complex_t v)
complex_t sin(const complex_t v)
complex_t atan(const complex_t v)
complex_t ceil(const complex_t v)
complex_t sqrt(const complex_t v)
complex_t acos(const complex_t v)
bool is_false(const complex_t v)
bool is_true(const complex_t v)
complex_t log10(const complex_t v)
complex_t pow(const complex_t v0, const complex_t v1)
complex_t cos(const complex_t v)
static const double _180_pi
static const double pi_180
static const double sqrt2
float erf_impl(const float v)
bool is_nan_impl(const T v, real_type_tag)
T floor_impl(const T v, real_type_tag)
bool is_false_impl(const T v)
T ceil_impl(const T v, real_type_tag)
T shr_impl(const T v0, const T v1, real_type_tag)
T tanh_impl(const T v, real_type_tag)
T acosh_impl(const T v, real_type_tag)
T nor_impl(const T v0, const T v1, real_type_tag)
bool is_integer_impl(const T &v, real_type_tag)
T sinc_impl(const T v, real_type_tag)
T const_pi_impl(real_type_tag)
T asin_impl(const T v, real_type_tag)
T log10_impl(const T v, real_type_tag)
T r2d_impl(const T v, real_type_tag)
T shl_impl(const T v0, const T v1, real_type_tag)
T logn_impl(const T v0, const T v1, real_type_tag)
T sqrt_impl(const T v, real_type_tag)
T xnor_impl(const T v0, const T v1, real_type_tag)
T asinh_impl(const T v, real_type_tag)
float erfc_impl(const float v)
T const_e_impl(real_type_tag)
T d2r_impl(const T v, real_type_tag)
T neg_impl(const T v, real_type_tag)
T root_impl(const T v0, const T v1, real_type_tag)
T and_impl(const T v0, const T v1, real_type_tag)
T pos_impl(const T v, real_type_tag)
T log_impl(const T v, real_type_tag)
_uint64_t to_uint64_impl(const T v, real_type_tag)
T ncdf_impl(const T v, real_type_tag)
T csc_impl(const T v, real_type_tag)
_int64_t to_int64_impl(const T v, real_type_tag)
T log2_impl(const T v, real_type_tag)
T cot_impl(const T v, real_type_tag)
T or_impl(const T v0, const T v1, real_type_tag)
T cos_impl(const T v, real_type_tag)
T sinh_impl(const T v, real_type_tag)
T roundn_impl(const T v0, const T v1, real_type_tag)
T sec_impl(const T v, real_type_tag)
T atan2_impl(const T v0, const T v1, real_type_tag)
T pow_impl(const T v0, const T v1, real_type_tag)
T modulus_impl(const T v0, const T v1, real_type_tag)
T log1p_impl(const T v, real_type_tag)
T trunc_impl(const T v, real_type_tag)
T frac_impl(const T v, real_type_tag)
T hypot_impl(const T v0, const T v1, real_type_tag)
T nand_impl(const T v0, const T v1, real_type_tag)
T equal_impl(const T v0, const T v1, real_type_tag)
T nequal_impl(const T v0, const T v1, real_type_tag)
T g2d_impl(const T v, real_type_tag)
T exp_impl(const T v, real_type_tag)
bool is_true_impl(const T v)
T sin_impl(const T v, real_type_tag)
T round_impl(const T v, real_type_tag)
T abs_impl(const T v, real_type_tag)
T sgn_impl(const T v, real_type_tag)
T d2g_impl(const T v, real_type_tag)
T acos_impl(const T v, real_type_tag)
T tan_impl(const T v, real_type_tag)
T xor_impl(const T v0, const T v1, real_type_tag)
T expm1_impl(const T v, real_type_tag)
int to_int32_impl(const T v, real_type_tag)
T atanh_impl(const T v, real_type_tag)
T atan_impl(const T v, real_type_tag)
T notl_impl(const T v, real_type_tag)
T cosh_impl(const T v, real_type_tag)
T pow(const T v0, const T v1)
T modulus(const T v0, const T v1)
T max(const T v0, const T v1)
bool is_true(const double v)
static const double pow10[]
bool string_to_real(Iterator &itr_external, const Iterator end, T &t, numeric::details::real_type_tag)
bool is_false(const expression_node< T > *node)
bool match_impl(const Iterator pattern_begin, const Iterator pattern_end, const Iterator data_begin, const Iterator data_end, const typename std::iterator_traits< Iterator >::value_type &zero_or_more, const typename std::iterator_traits< Iterator >::value_type &exactly_one)
static const std::size_t pow10_size
void print_type(const std::string &fmt, const T v, exprtk::details::numeric::details::real_type_tag)
std::complex< double > c_
static cmplx::complex_t value()