diff options
-rw-r--r-- | Eigen/src/Core/functors/UnaryFunctors.h | 31 |
1 files changed, 13 insertions, 18 deletions
diff --git a/Eigen/src/Core/functors/UnaryFunctors.h b/Eigen/src/Core/functors/UnaryFunctors.h index 7da1ccb9e..56522a38f 100644 --- a/Eigen/src/Core/functors/UnaryFunctors.h +++ b/Eigen/src/Core/functors/UnaryFunctors.h @@ -904,16 +904,6 @@ struct scalar_logistic_op { return pdiv(one, padd(one, pexp(pnegate(x)))); } }; -template <typename T> -struct functor_traits<scalar_logistic_op<T> > { - enum { - Cost = NumTraits<T>::AddCost * 2 + NumTraits<T>::MulCost * 6 + - scalar_div_cost<T, packet_traits<T>::HasDiv>::value + - functor_traits<scalar_exp_op<T> >::Cost, - PacketAccess = packet_traits<T>::HasAdd && packet_traits<T>::HasDiv && - packet_traits<T>::HasNegate && packet_traits<T>::HasExp - }; -}; /** \internal * \brief Template specialization of the logistic function for float. @@ -978,15 +968,20 @@ struct scalar_logistic_op<float> { } }; -template <> -struct functor_traits<scalar_logistic_op<float> > { +template <typename T> +struct functor_traits<scalar_logistic_op<T> > { enum { - Cost = NumTraits<float>::AddCost * 12 + NumTraits<float>::MulCost * 11 + - scalar_div_cost<float, packet_traits<float>::HasDiv>::value, - PacketAccess = packet_traits<float>::HasAdd && - packet_traits<float>::HasMul && - packet_traits<float>::HasDiv && - packet_traits<float>::HasMax && packet_traits<float>::HasMin + Cost = scalar_div_cost<T, packet_traits<T>::HasDiv>::value + + (internal::is_same<T, float>::value + ? NumTraits<T>::AddCost * 12 + NumTraits<T>::MulCost * 11 + : NumTraits<T>::AddCost * 2 + + functor_traits<scalar_exp_op<T> >::Cost), + PacketAccess = + packet_traits<T>::HasAdd && packet_traits<T>::HasDiv && + (internal::is_same<T, float>::value + ? packet_traits<T>::HasMul && packet_traits<T>::HasMax && + packet_traits<T>::HasMin + : packet_traits<T>::HasNegate && packet_traits<T>::HasExp) }; }; |