kfr

Fast, modern C++ DSP framework, FFT, Sample Rate Conversion, FIR/IIR/Biquad Filters (SSE, AVX, AVX-512, ARM NEON)
Log | Files | Refs | README

commit dc2b0bb668d47f262a3464a7bb7c6d11ceb3ea6d
parent 3395d1a9d2727a021fc8c2a4a1ef582278bf718c
Author: d.levin256@gmail.com <d.levin256@gmail.com>
Date:   Tue, 26 Jul 2016 19:35:03 +0300

Integer arguments for asin/acos

Diffstat:
Minclude/kfr/base/asin_acos.hpp | 26++++++++++++++------------
1 file changed, 14 insertions(+), 12 deletions(-)

diff --git a/include/kfr/base/asin_acos.hpp b/include/kfr/base/asin_acos.hpp @@ -33,25 +33,27 @@ namespace kfr namespace internal { -template <typename T, size_t N> -KFR_SINTRIN vec<T, N> asin(vec<T, N> x) +template <typename T, size_t N, typename Tout = flt_type<T>> +KFR_SINTRIN vec<Tout, N> asin(vec<T, N> x) { - return atan2(x, sqrt(T(1) - x * x)); + const vec<Tout, N> xx = cast<Tout>(x); + return atan2(xx, sqrt(Tout(1) - xx * xx)); } -template <typename T, size_t N> -KFR_SINTRIN vec<T, N> acos(vec<T, N> x) +template <typename T, size_t N, typename Tout = flt_type<T>> +KFR_SINTRIN vec<Tout, N> acos(vec<T, N> x) { - return atan2(sqrt(T(1) - x * x), x); + const vec<Tout, N> xx = cast<Tout>(x); + return atan2(sqrt(Tout(1) - xx * xx), xx); } -KFR_HANDLE_SCALAR(asin) -KFR_HANDLE_SCALAR(acos) -KFR_FN(asin) -KFR_FN(acos) +KFR_HANDLE_SCALAR_1(asin) +KFR_HANDLE_SCALAR_1(acos) +KFR_I_FN(asin) +KFR_I_FN(acos) } template <typename T1, KFR_ENABLE_IF(is_numeric<T1>::value)> -KFR_INTRIN T1 asin(const T1& x) +KFR_INTRIN flt_type<T1> asin(const T1& x) { return internal::asin(x); } @@ -63,7 +65,7 @@ KFR_INTRIN expr_func<internal::fn_asin, E1> asin(E1&& x) } template <typename T1, KFR_ENABLE_IF(is_numeric<T1>::value)> -KFR_INTRIN T1 acos(const T1& x) +KFR_INTRIN flt_type<T1> acos(const T1& x) { return internal::acos(x); }