This commit is contained in:
Gael Guennebaud 2016-04-13 23:45:10 +02:00
commit 703251f10f
2 changed files with 27 additions and 12 deletions

View File

@ -281,20 +281,18 @@ struct digamma_impl {
*/ */
Scalar p, q, nz, s, w, y; Scalar p, q, nz, s, w, y;
bool negative; bool negative = false;
const Scalar maxnum = NumTraits<Scalar>::infinity(); const Scalar maxnum = NumTraits<Scalar>::infinity();
const Scalar m_pi = EIGEN_PI; const Scalar m_pi(EIGEN_PI);
negative = 0; const Scalar zero = Scalar(0);
nz = 0.0; const Scalar one = Scalar(1);
const Scalar half = Scalar(0.5);
const Scalar zero = 0.0; nz = zero;
const Scalar one = 1.0;
const Scalar half = 0.5;
if (x <= zero) { if (x <= zero) {
negative = one; negative = true;
q = x; q = x;
p = numext::floor(q); p = numext::floor(q);
if (p == q) { if (p == q) {
@ -463,7 +461,7 @@ template <typename Scalar>
struct igammac_impl { struct igammac_impl {
EIGEN_DEVICE_FUNC EIGEN_DEVICE_FUNC
static Scalar run(Scalar a, Scalar x) { static Scalar run(Scalar a, Scalar x) {
/* igamc() /* igamc()
* *
* Incomplete gamma integral (modified for Eigen) * Incomplete gamma integral (modified for Eigen)
* *
@ -618,7 +616,7 @@ template <typename Scalar>
struct igamma_impl { struct igamma_impl {
EIGEN_DEVICE_FUNC EIGEN_DEVICE_FUNC
static Scalar run(Scalar a, Scalar x) { static Scalar run(Scalar a, Scalar x) {
/* igam() /* igam()
* Incomplete gamma integral * Incomplete gamma integral
* *
* *

View File

@ -424,13 +424,30 @@ template<> EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC Eigen::half sqrt(const Eigen::h
template<> EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC Eigen::half pow(const Eigen::half& a, const Eigen::half& b) { template<> EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC Eigen::half pow(const Eigen::half& a, const Eigen::half& b) {
return Eigen::half(::powf(float(a), float(b))); return Eigen::half(::powf(float(a), float(b)));
} }
template<> EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC Eigen::half sin(const Eigen::half& a) {
return Eigen::half(::sinf(float(a)));
}
template<> EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC Eigen::half cos(const Eigen::half& a) {
return Eigen::half(::cosf(float(a)));
}
template<> EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC Eigen::half tan(const Eigen::half& a) {
return Eigen::half(::tanf(float(a)));
}
template<> EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC Eigen::half tanh(const Eigen::half& a) {
return Eigen::half(::tanhf(float(a)));
}
template<> EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC Eigen::half floor(const Eigen::half& a) { template<> EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC Eigen::half floor(const Eigen::half& a) {
return Eigen::half(::floorf(float(a))); return Eigen::half(::floorf(float(a)));
} }
template<> EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC Eigen::half ceil(const Eigen::half& a) { template<> EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC Eigen::half ceil(const Eigen::half& a) {
return Eigen::half(::ceilf(float(a))); return Eigen::half(::ceilf(float(a)));
} }
template<> EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC Eigen::half erf(const Eigen::half& a) {
return Eigen::half(erff(float(a)));
}
template<> EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC Eigen::half erfc(const Eigen::half& a) {
return Eigen::half(erfcf(float(a)));
}
} // end namespace numext } // end namespace numext
} // end namespace Eigen } // end namespace Eigen