mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-01-06 14:14:46 +08:00
Revert changes to std_falback::log1p that broke handling of arguments less than -1. Fix packet op accordingly.
This commit is contained in:
parent
b021cdea6d
commit
9aba527405
@ -550,9 +550,8 @@ namespace std_fallback {
|
||||
EIGEN_USING_STD_MATH(log);
|
||||
Scalar x1p = RealScalar(1) + x;
|
||||
Scalar log_1p = log(x1p);
|
||||
const bool is_inf = numext::equal_strict(x1p, log_1p);
|
||||
const bool is_small = numext::equal_strict(x1p, Scalar(1));
|
||||
return (is_inf || is_small) ? x : x * (log_1p / (x1p - RealScalar(1)));
|
||||
return is_small ? x : x * (log_1p / (x1p - RealScalar(1)));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -137,10 +137,8 @@ Packet generic_plog1p(const Packet& x)
|
||||
Packet xp1 = padd(x, one);
|
||||
Packet small_mask = pcmp_eq(xp1, one);
|
||||
Packet log1 = plog(xp1);
|
||||
// Add a check to handle x == +inf.
|
||||
Packet pos_inf_mask = pcmp_eq(x, log1);
|
||||
Packet log_large = pmul(x, pdiv(log1, psub(xp1, one)));
|
||||
return pselect(por(small_mask, pos_inf_mask), x, log_large);
|
||||
return pselect(small_mask, x, log_large);
|
||||
}
|
||||
|
||||
/** \internal \returns exp(x)-1 computed using W. Kahan's formula.
|
||||
|
@ -607,8 +607,6 @@ template<typename Scalar,typename Packet> void packetmath_real()
|
||||
CHECK_CWISE1_IF(internal::packet_traits<Scalar>::HasLGamma, std::lgamma, internal::plgamma);
|
||||
CHECK_CWISE1_IF(internal::packet_traits<Scalar>::HasErf, std::erf, internal::perf);
|
||||
CHECK_CWISE1_IF(internal::packet_traits<Scalar>::HasErfc, std::erfc, internal::perfc);
|
||||
data1[0] = std::numeric_limits<Scalar>::infinity();
|
||||
data1[1] = std::numeric_limits<Scalar>::denorm_min();
|
||||
CHECK_CWISE1_IF(PacketTraits::HasExpm1, std::expm1, internal::pexpm1);
|
||||
CHECK_CWISE1_IF(PacketTraits::HasLog1p, std::log1p, internal::plog1p);
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user