20#ifndef EXPRTK_COMPLEX_ADAPTOR_HPP
21#define EXPRTK_COMPLEX_ADAPTOR_HPP
40 inline bool is_true (
const cmplx::complex_t& v);
41 inline bool is_false(
const cmplx::complex_t& v);
43 template <
typename Iterator>
44 inline bool string_to_real(Iterator& itr_external,
const Iterator end, cmplx::complex_t& t, details::numeric::details::complex_type_tag);
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 *
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>
269 if ((v0_true && v1_true) || (!v0_true && !v1_true))
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)));
293 const T p10 = T(
pow10[index]);
295 return T(
ceil ((v0 * p10) - T(0.5)) / p10);
297 return T(
floor((v0 * p10) + T(0.5)) / p10);
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>
368 double real_component;
370 t.
c_.real(real_component);
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
cmplx::complex_t complex_t
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)
const expression_node< T >::node_type nodetype_T0oT1< T, T0, T1 >::result
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()