mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-08-12 19:59:05 +08:00
fix compilation in stable norm, move a platform check to the unit tests
This commit is contained in:
parent
904f35d194
commit
4cf7366027
@ -108,21 +108,15 @@ MatrixBase<Derived>::blueNorm() const
|
|||||||
iemax = std::numeric_limits<RealScalar>::max_exponent; // maximum exponent
|
iemax = std::numeric_limits<RealScalar>::max_exponent; // maximum exponent
|
||||||
rbig = std::numeric_limits<RealScalar>::max(); // largest floating-point number
|
rbig = std::numeric_limits<RealScalar>::max(); // largest floating-point number
|
||||||
|
|
||||||
// Check the basic machine-dependent constants.
|
|
||||||
if(iemin > 1 - 2*it || 1+it>iemax || (it==2 && ibeta<5)
|
|
||||||
|| (it<=4 && ibeta <= 3 ) || it<2)
|
|
||||||
{
|
|
||||||
ei_assert(false && "the algorithm cannot be guaranteed on this computer");
|
|
||||||
}
|
|
||||||
iexp = -((1-iemin)/2);
|
iexp = -((1-iemin)/2);
|
||||||
b1 = RealScalar(std::pow(double(ibeta),iexp)); // lower boundary of midrange
|
b1 = RealScalar(std::pow<RealScalar>(ibeta,iexp)); // lower boundary of midrange
|
||||||
iexp = (iemax + 1 - it)/2;
|
iexp = (iemax + 1 - it)/2;
|
||||||
b2 = RealScalar(std::pow(double(ibeta),iexp)); // upper boundary of midrange
|
b2 = RealScalar(std::pow<RealScalar>(ibeta,iexp)); // upper boundary of midrange
|
||||||
|
|
||||||
iexp = (2-iemin)/2;
|
iexp = (2-iemin)/2;
|
||||||
s1m = RealScalar(std::pow(double(ibeta),iexp)); // scaling factor for lower range
|
s1m = RealScalar(std::pow<RealScalar>(ibeta,iexp)); // scaling factor for lower range
|
||||||
iexp = - ((iemax+it)/2);
|
iexp = - ((iemax+it)/2);
|
||||||
s2m = RealScalar(std::pow(double(ibeta),iexp)); // scaling factor for upper range
|
s2m = RealScalar(std::pow<RealScalar>(ibeta,iexp)); // scaling factor for upper range
|
||||||
|
|
||||||
overfl = rbig*s2m; // overfow boundary for abig
|
overfl = rbig*s2m; // overfow boundary for abig
|
||||||
eps = RealScalar(std::pow(double(ibeta), 1-it));
|
eps = RealScalar(std::pow(double(ibeta), 1-it));
|
||||||
|
@ -33,6 +33,21 @@ template<typename MatrixType> void stable_norm(const MatrixType& m)
|
|||||||
typedef typename MatrixType::Scalar Scalar;
|
typedef typename MatrixType::Scalar Scalar;
|
||||||
typedef typename NumTraits<Scalar>::Real RealScalar;
|
typedef typename NumTraits<Scalar>::Real RealScalar;
|
||||||
|
|
||||||
|
// Check the basic machine-dependent constants.
|
||||||
|
{
|
||||||
|
int nbig, ibeta, it, iemin, iemax, iexp;
|
||||||
|
RealScalar abig, eps;
|
||||||
|
|
||||||
|
ibeta = std::numeric_limits<RealScalar>::radix; // base for floating-point numbers
|
||||||
|
it = std::numeric_limits<RealScalar>::digits; // number of base-beta digits in mantissa
|
||||||
|
iemin = std::numeric_limits<RealScalar>::min_exponent; // minimum exponent
|
||||||
|
iemax = std::numeric_limits<RealScalar>::max_exponent; // maximum exponent
|
||||||
|
|
||||||
|
VERIFY( (!(iemin > 1 - 2*it || 1+it>iemax || (it==2 && ibeta<5) || (it<=4 && ibeta <= 3 ) || it<2))
|
||||||
|
&& "the stable norm algorithm cannot be guaranteed on this computer");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int rows = m.rows();
|
int rows = m.rows();
|
||||||
int cols = m.cols();
|
int cols = m.cols();
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user