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<
|
struct count_bits_impl<
|
||||||
BitsType, std::enable_if_t<std::is_integral<BitsType>::value && sizeof(BitsType) <= sizeof(unsigned int)>> {
|
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 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 EIGEN_DEVICE_FUNC inline int clz(BitsType bits) {
|
||||||
static constexpr int kLeadingBitsOffset = (sizeof(unsigned int) - sizeof(BitsType)) * CHAR_BIT;
|
static constexpr int kLeadingBitsOffset = (sizeof(unsigned int) - sizeof(BitsType)) * CHAR_BIT;
|
||||||
return bits == 0 ? kNumBits : __builtin_clz(static_cast<unsigned int>(bits)) - kLeadingBitsOffset;
|
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) &&
|
std::enable_if_t<std::is_integral<BitsType>::value && sizeof(unsigned int) < sizeof(BitsType) &&
|
||||||
sizeof(BitsType) <= sizeof(unsigned long)>> {
|
sizeof(BitsType) <= sizeof(unsigned long)>> {
|
||||||
static constexpr int kNumBits = static_cast<int>(sizeof(BitsType) * CHAR_BIT);
|
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 EIGEN_DEVICE_FUNC inline int clz(BitsType bits) {
|
||||||
static constexpr int kLeadingBitsOffset = (sizeof(unsigned long) - sizeof(BitsType)) * CHAR_BIT;
|
static constexpr int kLeadingBitsOffset = (sizeof(unsigned long) - sizeof(BitsType)) * CHAR_BIT;
|
||||||
return bits == 0 ? kNumBits : __builtin_clzl(static_cast<unsigned long>(bits)) - kLeadingBitsOffset;
|
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) &&
|
std::enable_if_t<std::is_integral<BitsType>::value && sizeof(unsigned long) < sizeof(BitsType) &&
|
||||||
sizeof(BitsType) <= sizeof(unsigned long long)>> {
|
sizeof(BitsType) <= sizeof(unsigned long long)>> {
|
||||||
static constexpr int kNumBits = static_cast<int>(sizeof(BitsType) * CHAR_BIT);
|
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 EIGEN_DEVICE_FUNC inline int clz(BitsType bits) {
|
||||||
static constexpr int kLeadingBitsOffset = (sizeof(unsigned long long) - sizeof(BitsType)) * CHAR_BIT;
|
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;
|
return bits == 0 ? kNumBits : __builtin_clzll(static_cast<unsigned long long>(bits)) - kLeadingBitsOffset;
|
||||||
@ -706,7 +703,6 @@ template <typename BitsType>
|
|||||||
struct count_bits_impl<
|
struct count_bits_impl<
|
||||||
BitsType, std::enable_if_t<std::is_integral<BitsType>::value && sizeof(BitsType) <= sizeof(unsigned long)>> {
|
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 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 EIGEN_DEVICE_FUNC inline int clz(BitsType bits) {
|
||||||
unsigned long out;
|
unsigned long out;
|
||||||
_BitScanReverse(&out, static_cast<unsigned long>(bits));
|
_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) &&
|
std::enable_if_t<std::is_integral<BitsType>::value && sizeof(unsigned long) < sizeof(BitsType) &&
|
||||||
sizeof(BitsType) <= sizeof(__int64)>> {
|
sizeof(BitsType) <= sizeof(__int64)>> {
|
||||||
static constexpr int kNumBits = static_cast<int>(sizeof(BitsType) * CHAR_BIT);
|
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 EIGEN_DEVICE_FUNC inline int clz(BitsType bits) {
|
||||||
unsigned long out;
|
unsigned long out;
|
||||||
_BitScanReverse64(&out, static_cast<unsigned __int64>(bits));
|
_BitScanReverse64(&out, static_cast<unsigned __int64>(bits));
|
||||||
|
@ -139,7 +139,7 @@ struct random_longdouble_impl {
|
|||||||
};
|
};
|
||||||
template <>
|
template <>
|
||||||
struct random_longdouble_impl<false> {
|
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) {
|
static EIGEN_DEVICE_FUNC inline long double run(int numRandomBits) {
|
||||||
return static_cast<long double>(random_float_impl<double>::run(numRandomBits));
|
return static_cast<long double>(random_float_impl<double>::run(numRandomBits));
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user