27 bool complex_real_product_ok =
true;
31 int ibeta, it, iemin, iemax;
33 ibeta = std::numeric_limits<RealScalar>::radix;
34 it = std::numeric_limits<RealScalar>::digits;
35 iemin = std::numeric_limits<RealScalar>::min_exponent;
36 iemax = std::numeric_limits<RealScalar>::max_exponent;
38 VERIFY((!(iemin > 1 - 2 * it || 1 + it > iemax || (it == 2 && ibeta < 5) || (it <= 4 && ibeta <= 3) || it < 2)) &&
39 "the stable norm algorithm cannot be guaranteed on this computer");
41 Scalar inf = std::numeric_limits<RealScalar>::infinity();
43 complex_real_product_ok =
false;
44 static bool first =
true;
46 std::cerr <<
"WARNING: compiler mess up complex*real product, " <<
inf <<
" * " << 1.0 <<
" = "
56 Scalar factor = internal::random<Scalar>();
60 factor = internal::random<Scalar>();
115 Index i = internal::random<Index>(0,
rows - 1);
116 Index j = internal::random<Index>(0,
cols - 1);
121 v(
i,
j) = std::numeric_limits<RealScalar>::quiet_NaN();
137 v(
i,
j) = std::numeric_limits<RealScalar>::infinity();
143 if (complex_real_product_ok) {
155 v(
i,
j) = -std::numeric_limits<RealScalar>::infinity();
161 if (complex_real_product_ok) {
172 Index i2 = internal::random<Index>(0,
rows - 1);
173 Index j2 = internal::random<Index>(0,
cols - 1);
175 v(
i,
j) = -std::numeric_limits<RealScalar>::infinity();
176 v(i2, j2) = std::numeric_limits<RealScalar>::quiet_NaN();
185 if (i2 !=
i || j2 !=
j) {
200 vcopy.stableNormalize();
207 VERIFY_IS_APPROX(vbig / big_scaling, (vbig.stableNorm() * vbig.stableNormalized()).eval() / big_scaling);
AnnoyingScalar abs(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:135
AnnoyingScalar sqrt(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:134
Array< int, Dynamic, 1 > v
Definition: Array_initializer_list_vector_cxx11.cpp:1
Array< double, 1, 3 > e(1./3., 0.5, 2.)
int rows
Definition: Tutorial_commainit_02.cpp:1
int cols
Definition: Tutorial_commainit_02.cpp:1
Scalar Scalar int size
Definition: benchVecAdd.cpp:17
SCALAR Scalar
Definition: bench_gemm.cpp:45
NumTraits< Scalar >::Real RealScalar
Definition: bench_gemm.cpp:46
EIGEN_DONT_INLINE T::Scalar blueNorm(T &v)
Definition: bench_norm.cpp:24
EIGEN_DONT_INLINE T::Scalar hypotNorm(T &v)
Definition: bench_norm.cpp:19
EIGEN_DONT_INLINE T::Scalar stableNorm(T &v)
Definition: bench_norm.cpp:14
MatrixXf MatrixType
Definition: benchmark-blocking-sizes.cpp:52
#define min(a, b)
Definition: datatypes.h:22
#define max(a, b)
Definition: datatypes.h:23
#define VERIFY_IS_APPROX(a, b)
Definition: integer_types.cpp:13
#define VERIFY_IS_NOT_APPROX(a, b)
Definition: integer_types.cpp:15
int * m
Definition: level2_cplx_impl.h:294
#define isfinite(X)
Definition: main.h:111
#define VERIFY(a)
Definition: main.h:362
#define VERIFY_IS_MUCH_SMALLER_THAN(a, b)
Definition: main.h:371
#define isnan(X)
Definition: main.h:109
#define isinf(X)
Definition: main.h:110
EIGEN_DEVICE_FUNC bool abs2(bool x)
Definition: MathFunctions.h:1102
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
Definition: Meta.h:83
bool isPlusInf(const T &x)
Definition: main.h:715
const Mdouble inf
Definition: GeneralDefine.h:23
double Zero
Definition: pseudosolid_node_update_elements.cc:35
EIGEN_DONT_INLINE T copy(const T &x)
Definition: stable_norm.cpp:13
Holds information about the various numeric (i.e. scalar) types allowed by Eigen.
Definition: NumTraits.h:217
std::ptrdiff_t j
Definition: tut_arithmetic_redux_minmax.cpp:2