20#ifndef EXPRTK_REAL_ADAPTOR_HPP
21#define EXPRTK_REAL_ADAPTOR_HPP
32 namespace numeric {
namespace details
34 struct my_real_type_tag;
37 template <
typename T>
inline T const_e_impl (my_real_type_tag);
43 template <
typename Iterator>
47 namespace rtl {
namespace io
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>
199 template <
typename T>
205 template <
typename T>
211 template <
typename T>
217 template <
typename T>
223 template <
typename T>
229 template <
typename T>
238 template <
typename T>
244 template <
typename T>
255 template <
typename T>
263 template <
typename T>
266 return ((v <
T(0)) ?
ceil(v -
T(0.5)) :
floor(v +
T(0.5)));
269 template <
typename T>
272 const int index = std::max<int>(0, std::min<int>(
pow10_size - 1,
static_cast<int>(
floor(v1))));
280 template <
typename T>
286 template <
typename T>
289 return pow(v0,
T(1) / v1);
292 template <
typename T>
295 return sqrt((v0 * v0) + (v1 * v1));
298 template <
typename T>
301 return std::atan2(v0.d_,v1.d_);
304 template <
typename T>
307 return v0 * (
T(1) /
pow(
T(2),v1));
310 template <
typename T>
313 return v0 *
pow(
T(2),v1);
316 template <
typename T>
322 template <
typename T>
328 template <
typename T>
334 template <
typename T>
342 template <
typename Iterator>
353 namespace rtl {
namespace io
359 #if defined(__clang__)
360 #pragma clang diagnostic push
361 #pragma clang diagnostic ignored "-Wformat-nonliteral"
362 #elif defined(__GNUC__) || defined(__GNUG__)
363 #pragma GCC diagnostic push
364 #pragma GCC diagnostic ignored "-Wformat-nonliteral"
365 #elif defined(_MSC_VER)
368 printf(fmt.c_str(),
static_cast<double>(v));
370 #if defined(__clang__)
371 #pragma clang diagnostic pop
372 #elif defined(__GNUC__) || defined(__GNUG__)
373 #pragma GCC diagnostic pop
374 #elif defined(_MSC_VER)
bool is_true(const complex_t v)
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)
type pow(const type v0, const type v1)
bool is_false(const type v)
bool is_true(const type v)
static real::type value()