36 #ifndef DSPFILTERS_MATHSUPPLEMENT_H
37 #define DSPFILTERS_MATHSUPPLEMENT_H
43 const double doublePi =3.1415926535897932384626433832795028841971;
44 const double doublePi_2 =1.5707963267948966192313216916397514420986;
45 const double doubleLn2 =0.69314718055994530941723212145818;
46 const double doubleLn10 =2.3025850929940456840179914546844;
48 typedef std::complex<double> complex_t;
49 typedef std::pair<complex_t, complex_t> complex_pair_t;
51 template<
typename Real>
52 inline std::complex<Real> solve_quadratic_1 (Real a, Real b, Real c)
54 return (-b + sqrt (std::complex<Real> (b*b - 4*a*c, 0))) / (2. * a);
57 template<
typename Real>
58 inline std::complex<Real> solve_quadratic_2 (Real a, Real b, Real c)
60 return (-b - sqrt (std::complex<Real> (b*b - 4*a*c, 0))) / (2. * a);
63 inline const complex_t infinity()
65 return complex_t (std::numeric_limits<double>::infinity());
68 inline const complex_t adjust_imag (
const complex_t& c)
70 if (fabs (c.imag()) < 1e-30)
71 return complex_t (c.real(), 0);
76 template <
typename Ty,
typename To>
77 inline std::complex<Ty> addmul (
const std::complex<Ty>& c,
79 const std::complex<To>& c1)
81 return std::complex <Ty> (
82 c.real() + v * c1.real(), c.imag() + v * c1.imag());
85 template <
typename Ty>
86 inline std::complex<Ty> recip (
const std::complex<Ty>& c)
88 Ty n = 1.0 / std::norm (c);
90 return std::complex<Ty> (n * c.real(), n * c.imag());
93 template <
typename Ty>
94 inline Ty asinh (Ty x)
96 return log (x + std::sqrt (x * x + 1 ));
99 template <
typename Ty>
100 inline Ty acosh (Ty x)
102 return log (x + std::sqrt (x * x - 1));
105 template <
typename Ty>
106 inline bool is_nan (Ty v)
112 inline bool is_nan<complex_t> (complex_t v)
114 return Dsp::is_nan (v.real()) || Dsp::is_nan (v.imag());
126 const double anti_denormal_vsa = 1e-8;
132 : m_v (anti_denormal_vsa)
143 static inline double dc ()
145 return anti_denormal_vsa;