10 #ifndef EIGEN_RANDOM_IMPL_H
11 #define EIGEN_RANDOM_IMPL_H
24 template <
typename Scalar,
bool IsComplex,
bool IsInteger>
27 template <
typename Scalar>
30 template <
typename Scalar>
35 template <
typename Scalar>
40 template <
typename Scalar>
54 template <
typename Scalar>
66 for (
int shift = 0; shift < numRandomBits; shift +=
kEntropy) {
68 randomBits |=
static_cast<Scalar>(
r) << shift;
76 template <
typename BitsType>
91 BitsType randomBits = getRandomBits<BitsType>(numRandomBits);
95 randomBits |= numext::bit_cast<BitsType>(
Scalar(2));
97 Scalar result = numext::bit_cast<Scalar>(randomBits) -
Scalar(3);
104 template <
typename Scalar>
121 template <
bool Specialize = (
sizeof(
long double) == 2 *
sizeof(
uint64_t)) &&
122 ((std::numeric_limits<long double>::digits != (2 * std::numeric_limits<double>::digits)))>
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);
152 template <
typename Scalar>
158 Scalar result = (half_x + half_y) + (half_y - half_x) *
run(numRandomBits);
163 return run(
x,
y, Impl::mantissaBits());
173 template <
typename Scalar>
175 static constexpr
int kTotalBits =
sizeof(
Scalar) * CHAR_BIT;
177 if (
y <=
x)
return x;
186 randomBits = getRandomBits<Scalar>(numRandomBits);
189 }
while (randomBits >= count);
190 Scalar result =
x + randomBits;
197 template <
typename Scalar>
199 static constexpr
int kTotalBits =
sizeof(
Scalar) * CHAR_BIT;
202 if (
y <=
x)
return x;
215 template <
typename Scalar,
bool IsSigned>
224 template <
typename Scalar>
230 if (
y <=
x)
return x;
236 template <
typename Scalar>
#define EIGEN_USING_STD(FUNC)
Definition: Macros.h:1090
#define EIGEN_DEVICE_FUNC
Definition: Macros.h:892
#define eigen_assert(x)
Definition: Macros.h:910
#define EIGEN_MATHFUNC_IMPL(func, scalar)
Definition: MathFunctions.h:64
#define EIGEN_STATIC_ASSERT(X, MSG)
Definition: StaticAssert.h:26
SCALAR Scalar
Definition: bench_gemm.cpp:45
#define SCALAR
Definition: bench_gemm.cpp:22
The matrix class, also used for vectors and row-vectors.
Definition: Eigen/Eigen/src/Core/Matrix.h:186
@ BuiltIn
Definition: Constants.h:311
const Scalar & y
Definition: RandomImpl.h:36
EIGEN_DEVICE_FUNC BitsType getRandomBits(int numRandomBits)
Definition: RandomImpl.h:77
int log2_ceil(const BitsType &x)
Definition: MathFunctions.h:758
EIGEN_MATHFUNC_RETVAL(random, Scalar) random(const Scalar &x
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
Namespace containing all symbols from the Eigen library.
Definition: bench_norm.cpp:70
auto run(Kernel kernel, Args &&... args) -> decltype(kernel(args...))
Definition: gpu_test_helper.h:414
squared absolute value
Definition: GlobalFunctions.h:87
type
Definition: compute_granudrum_aor.py:141
Definition: Eigen_Colamd.h:49
list x
Definition: plotDoE.py:28
Holds information about the various numeric (i.e. scalar) types allowed by Eigen.
Definition: NumTraits.h:217
Definition: RandomImpl.h:46
static EIGEN_DEVICE_FUNC ReturnType run()
Definition: RandomImpl.h:50
static constexpr int Entropy
Definition: RandomImpl.h:48
static constexpr ReturnType Highest
Definition: RandomImpl.h:49
int ReturnType
Definition: RandomImpl.h:47
Definition: RandomImpl.h:55
typename RandomDevice::ReturnType RandomReturnType
Definition: RandomImpl.h:58
static EIGEN_DEVICE_FUNC Scalar run(int numRandomBits)
Definition: RandomImpl.h:62
static constexpr int kEntropy
Definition: RandomImpl.h:59
static constexpr int kTotalBits
Definition: RandomImpl.h:60
static EIGEN_DEVICE_FUNC Scalar run()
Definition: RandomImpl.h:166
static EIGEN_DEVICE_FUNC Scalar run(const Scalar &x, const Scalar &y, int numRandomBits)
Definition: RandomImpl.h:155
static EIGEN_DEVICE_FUNC Scalar run(int numRandomBits)
Definition: RandomImpl.h:165
static EIGEN_DEVICE_FUNC Scalar run(const Scalar &x, const Scalar &y)
Definition: RandomImpl.h:162
static EIGEN_DEVICE_FUNC Scalar run(const Scalar &x, const Scalar &y, int numRandomBits)
Definition: RandomImpl.h:240
NumTraits< Scalar >::Real RealScalar
Definition: RandomImpl.h:238
static EIGEN_DEVICE_FUNC Scalar run(int numRandomBits)
Definition: RandomImpl.h:246
static EIGEN_DEVICE_FUNC Scalar run()
Definition: RandomImpl.h:249
static EIGEN_DEVICE_FUNC Scalar run(const Scalar &x, const Scalar &y)
Definition: RandomImpl.h:243
Definition: RandomImpl.h:25
static EIGEN_DEVICE_FUNC Scalar run(int numRandomBits)
Definition: RandomImpl.h:111
static EIGEN_DEVICE_FUNC int mantissaBits()
Definition: RandomImpl.h:106
Definition: RandomImpl.h:83
static EIGEN_DEVICE_FUNC Scalar run(int numRandomBits)
Definition: RandomImpl.h:89
typename numext::get_integer_by_size< sizeof(Scalar)>::unsigned_type BitsType
Definition: RandomImpl.h:84
static constexpr EIGEN_DEVICE_FUNC int mantissaBits()
Definition: RandomImpl.h:85
static EIGEN_DEVICE_FUNC bool run()
Definition: RandomImpl.h:233
static EIGEN_DEVICE_FUNC bool run(const bool &x, const bool &y)
Definition: RandomImpl.h:229
Definition: RandomImpl.h:28
static EIGEN_DEVICE_FUNC Scalar run()
Definition: RandomImpl.h:218
static EIGEN_DEVICE_FUNC Scalar run(const Scalar &, const Scalar &)
Definition: RandomImpl.h:217
static EIGEN_DEVICE_FUNC Scalar run(const Scalar &x, const Scalar &y)
Definition: RandomImpl.h:176
static EIGEN_DEVICE_FUNC Scalar run()
Definition: RandomImpl.h:193
typename make_unsigned< Scalar >::type BitsType
Definition: RandomImpl.h:200
static EIGEN_DEVICE_FUNC Scalar run(const Scalar &x, const Scalar &y)
Definition: RandomImpl.h:201
static EIGEN_DEVICE_FUNC Scalar run()
Definition: RandomImpl.h:211
Definition: RandomImpl.h:170
static EIGEN_DEVICE_FUNC long double run(int numRandomBits)
Definition: RandomImpl.h:144
static constexpr EIGEN_DEVICE_FUNC int mantissaBits()
Definition: RandomImpl.h:143
Definition: RandomImpl.h:123
static constexpr EIGEN_DEVICE_FUNC int mantissaBits()
Definition: RandomImpl.h:125
static constexpr int Size
Definition: RandomImpl.h:124
static EIGEN_DEVICE_FUNC long double run(int numRandomBits)
Definition: RandomImpl.h:126
Definition: RandomImpl.h:31
Scalar type
Definition: RandomImpl.h:32
void run(const string &dir_name, LinearSolver *linear_solver_pt, const unsigned nel_1d, bool mess_up_order)
Definition: two_d_poisson_compare_solvers.cc:317