1 // This file is part of Eigen, a lightweight C++ template library 2 // for linear algebra. 3 // 4 // This Source Code Form is subject to the terms of the Mozilla 5 // Public License v. 2.0. If a copy of the MPL was not distributed 6 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/. 7 8 #ifndef EIGEN_BESSELFUNCTIONS_HALF_H 9 #define EIGEN_BESSELFUNCTIONS_HALF_H 10 11 namespace Eigen { 12 namespace numext { 13 14 #if EIGEN_HAS_C99_MATH 15 template <> bessel_i0(const Eigen::half & x)16EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC Eigen::half bessel_i0(const Eigen::half& x) { 17 return Eigen::half(Eigen::numext::bessel_i0(static_cast<float>(x))); 18 } 19 template <> bessel_i0e(const Eigen::half & x)20EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC Eigen::half bessel_i0e(const Eigen::half& x) { 21 return Eigen::half(Eigen::numext::bessel_i0e(static_cast<float>(x))); 22 } 23 template <> bessel_i1(const Eigen::half & x)24EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC Eigen::half bessel_i1(const Eigen::half& x) { 25 return Eigen::half(Eigen::numext::bessel_i1(static_cast<float>(x))); 26 } 27 template <> bessel_i1e(const Eigen::half & x)28EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC Eigen::half bessel_i1e(const Eigen::half& x) { 29 return Eigen::half(Eigen::numext::bessel_i1e(static_cast<float>(x))); 30 } bessel_j0(const Eigen::half & x)31EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC Eigen::half bessel_j0(const Eigen::half& x) { 32 return Eigen::half(Eigen::numext::bessel_j0(static_cast<float>(x))); 33 } 34 template <> bessel_j1(const Eigen::half & x)35EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC Eigen::half bessel_j1(const Eigen::half& x) { 36 return Eigen::half(Eigen::numext::bessel_j1(static_cast<float>(x))); 37 } 38 template <> bessel_y0(const Eigen::half & x)39EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC Eigen::half bessel_y0(const Eigen::half& x) { 40 return Eigen::half(Eigen::numext::bessel_y0(static_cast<float>(x))); 41 } 42 template <> bessel_y1(const Eigen::half & x)43EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC Eigen::half bessel_y1(const Eigen::half& x) { 44 return Eigen::half(Eigen::numext::bessel_y1(static_cast<float>(x))); 45 } bessel_k0(const Eigen::half & x)46EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC Eigen::half bessel_k0(const Eigen::half& x) { 47 return Eigen::half(Eigen::numext::bessel_k0(static_cast<float>(x))); 48 } 49 template <> bessel_k0e(const Eigen::half & x)50EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC Eigen::half bessel_k0e(const Eigen::half& x) { 51 return Eigen::half(Eigen::numext::bessel_k0e(static_cast<float>(x))); 52 } 53 template <> bessel_k1(const Eigen::half & x)54EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC Eigen::half bessel_k1(const Eigen::half& x) { 55 return Eigen::half(Eigen::numext::bessel_k1(static_cast<float>(x))); 56 } 57 template <> bessel_k1e(const Eigen::half & x)58EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC Eigen::half bessel_k1e(const Eigen::half& x) { 59 return Eigen::half(Eigen::numext::bessel_k1e(static_cast<float>(x))); 60 } 61 #endif 62 63 } // end namespace numext 64 } // end namespace Eigen 65 66 #endif // EIGEN_BESSELFUNCTIONS_HALF_H 67