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:
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);
}