Eigen::internal::random_longdouble_impl< Specialize > Struct Template Reference

#include <RandomImpl.h>

+ Inheritance diagram for Eigen::internal::random_longdouble_impl< Specialize >:

Static Public Member Functions

static constexpr EIGEN_DEVICE_FUNC int mantissaBits ()
 
static EIGEN_DEVICE_FUNC long double run (int numRandomBits)
 

Static Public Attributes

static constexpr int Size = sizeof(long double)
 

Member Function Documentation

◆ mantissaBits()

template<bool Specialize = (sizeof(long double) == 2 * sizeof(uint64_t)) && ((std::numeric_limits<long double>::digits != (2 * std::numeric_limits<double>::digits)))>
static constexpr EIGEN_DEVICE_FUNC int Eigen::internal::random_longdouble_impl< Specialize >::mantissaBits ( )
inlinestaticconstexpr
125 { return NumTraits<long double>::digits() - 1; }

Referenced by Eigen::internal::random_longdouble_impl< Specialize >::run().

◆ run()

template<bool Specialize = (sizeof(long double) == 2 * sizeof(uint64_t)) && ((std::numeric_limits<long double>::digits != (2 * std::numeric_limits<double>::digits)))>
static EIGEN_DEVICE_FUNC long double Eigen::internal::random_longdouble_impl< Specialize >::run ( int  numRandomBits)
inlinestatic
126  {
127  eigen_assert(numRandomBits >= 0 && numRandomBits <= mantissaBits());
128  EIGEN_USING_STD(memcpy);
129  int numLowBits = numext::mini(numRandomBits, 64);
130  int numHighBits = numext::maxi(numRandomBits - 64, 0);
131  uint64_t randomBits[2];
132  long double result = 2.0L;
133  memcpy(&randomBits, &result, Size);
134  randomBits[0] |= getRandomBits<uint64_t>(numLowBits);
135  randomBits[1] |= getRandomBits<uint64_t>(numHighBits);
136  memcpy(&result, &randomBits, Size);
137  result -= 3.0L;
138  return result;
139  }
#define EIGEN_USING_STD(FUNC)
Definition: Macros.h:1090
#define eigen_assert(x)
Definition: Macros.h:910
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE T maxi(const T &x, const T &y)
Definition: MathFunctions.h:926
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE T mini(const T &x, const T &y)
Definition: MathFunctions.h:920
std::uint64_t uint64_t
Definition: Meta.h:42
static constexpr EIGEN_DEVICE_FUNC int mantissaBits()
Definition: RandomImpl.h:125
static constexpr int Size
Definition: RandomImpl.h:124

References eigen_assert, EIGEN_USING_STD, Eigen::internal::random_longdouble_impl< Specialize >::mantissaBits(), Eigen::numext::maxi(), Eigen::numext::mini(), and Eigen::internal::random_longdouble_impl< Specialize >::Size.

Member Data Documentation

◆ Size

template<bool Specialize = (sizeof(long double) == 2 * sizeof(uint64_t)) && ((std::numeric_limits<long double>::digits != (2 * std::numeric_limits<double>::digits)))>
constexpr int Eigen::internal::random_longdouble_impl< Specialize >::Size = sizeof(long double)
staticconstexpr

The documentation for this struct was generated from the following file: