mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-09-13 01:43:13 +08:00
Fix long double random
This commit is contained in:
parent
776d86d8df
commit
86aee3d9c5
@ -657,7 +657,6 @@ template <typename BitsType>
|
||||
struct count_bits_impl<
|
||||
BitsType, std::enable_if_t<std::is_integral<BitsType>::value && sizeof(BitsType) <= sizeof(unsigned int)>> {
|
||||
static constexpr int kNumBits = static_cast<int>(sizeof(BitsType) * CHAR_BIT);
|
||||
static_assert(std::is_integral<BitsType>::value, "BitsType must be a built-in integer");
|
||||
static EIGEN_DEVICE_FUNC inline int clz(BitsType bits) {
|
||||
static constexpr int kLeadingBitsOffset = (sizeof(unsigned int) - sizeof(BitsType)) * CHAR_BIT;
|
||||
return bits == 0 ? kNumBits : __builtin_clz(static_cast<unsigned int>(bits)) - kLeadingBitsOffset;
|
||||
@ -673,7 +672,6 @@ struct count_bits_impl<BitsType,
|
||||
std::enable_if_t<std::is_integral<BitsType>::value && sizeof(unsigned int) < sizeof(BitsType) &&
|
||||
sizeof(BitsType) <= sizeof(unsigned long)>> {
|
||||
static constexpr int kNumBits = static_cast<int>(sizeof(BitsType) * CHAR_BIT);
|
||||
static_assert(std::is_integral<BitsType>::value, "BitsType must be a built-in integer");
|
||||
static EIGEN_DEVICE_FUNC inline int clz(BitsType bits) {
|
||||
static constexpr int kLeadingBitsOffset = (sizeof(unsigned long) - sizeof(BitsType)) * CHAR_BIT;
|
||||
return bits == 0 ? kNumBits : __builtin_clzl(static_cast<unsigned long>(bits)) - kLeadingBitsOffset;
|
||||
@ -689,7 +687,6 @@ struct count_bits_impl<BitsType,
|
||||
std::enable_if_t<std::is_integral<BitsType>::value && sizeof(unsigned long) < sizeof(BitsType) &&
|
||||
sizeof(BitsType) <= sizeof(unsigned long long)>> {
|
||||
static constexpr int kNumBits = static_cast<int>(sizeof(BitsType) * CHAR_BIT);
|
||||
static_assert(std::is_integral<BitsType>::value, "BitsType must be a built-in integer");
|
||||
static EIGEN_DEVICE_FUNC inline int clz(BitsType bits) {
|
||||
static constexpr int kLeadingBitsOffset = (sizeof(unsigned long long) - sizeof(BitsType)) * CHAR_BIT;
|
||||
return bits == 0 ? kNumBits : __builtin_clzll(static_cast<unsigned long long>(bits)) - kLeadingBitsOffset;
|
||||
@ -706,7 +703,6 @@ template <typename BitsType>
|
||||
struct count_bits_impl<
|
||||
BitsType, std::enable_if_t<std::is_integral<BitsType>::value && sizeof(BitsType) <= sizeof(unsigned long)>> {
|
||||
static constexpr int kNumBits = static_cast<int>(sizeof(BitsType) * CHAR_BIT);
|
||||
static_assert(std::is_integral<BitsType>::value, "BitsType must be a built-in integer");
|
||||
static EIGEN_DEVICE_FUNC inline int clz(BitsType bits) {
|
||||
unsigned long out;
|
||||
_BitScanReverse(&out, static_cast<unsigned long>(bits));
|
||||
@ -727,7 +723,6 @@ struct count_bits_impl<BitsType,
|
||||
std::enable_if_t<std::is_integral<BitsType>::value && sizeof(unsigned long) < sizeof(BitsType) &&
|
||||
sizeof(BitsType) <= sizeof(__int64)>> {
|
||||
static constexpr int kNumBits = static_cast<int>(sizeof(BitsType) * CHAR_BIT);
|
||||
static_assert(std::is_integral<BitsType>::value, "BitsType must be a built-in integer");
|
||||
static EIGEN_DEVICE_FUNC inline int clz(BitsType bits) {
|
||||
unsigned long out;
|
||||
_BitScanReverse64(&out, static_cast<unsigned __int64>(bits));
|
||||
|
@ -139,7 +139,7 @@ struct random_longdouble_impl {
|
||||
};
|
||||
template <>
|
||||
struct random_longdouble_impl<false> {
|
||||
static constexpr EIGEN_DEVICE_FUNC inline int mantissaBits() { return NumTraits<long double>::digits() - 1; }
|
||||
static constexpr EIGEN_DEVICE_FUNC inline int mantissaBits() { return NumTraits<double>::digits() - 1; }
|
||||
static EIGEN_DEVICE_FUNC inline long double run(int numRandomBits) {
|
||||
return static_cast<long double>(random_float_impl<double>::run(numRandomBits));
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user