From 0029599c4aaea310c348155f46e6b7d1be27788b Mon Sep 17 00:00:00 2001 From: Gael Guennebaud Date: Tue, 9 Apr 2013 09:23:40 +0200 Subject: [PATCH] Fix bug #581: remove useless piece of code is blueNorm (transplanted from 8f44205671daed7637056162a841f8fd0312b0c1 ) --- Eigen/src/Core/StableNorm.h | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/Eigen/src/Core/StableNorm.h b/Eigen/src/Core/StableNorm.h index 7499b195e..f52e06f4f 100644 --- a/Eigen/src/Core/StableNorm.h +++ b/Eigen/src/Core/StableNorm.h @@ -13,6 +13,7 @@ namespace Eigen { namespace internal { + template inline void stable_norm_kernel(const ExpressionType& bl, Scalar& ssq, Scalar& scale, Scalar& invScale) { @@ -76,21 +77,20 @@ MatrixBase::blueNorm() const using std::pow; using std::min; using std::max; - static Index nmax = -1; + static bool initialized = false; static RealScalar b1, b2, s1m, s2m, overfl, rbig, relerr; - if(nmax <= 0) + if(!initialized) { - int nbig, ibeta, it, iemin, iemax, iexp; + int ibeta, it, iemin, iemax, iexp; RealScalar abig, eps; // This program calculates the machine-dependent constants - // bl, b2, slm, s2m, relerr overfl, nmax + // bl, b2, slm, s2m, relerr overfl // from the "basic" machine-dependent numbers - // nbig, ibeta, it, iemin, iemax, rbig. + // ibeta, it, iemin, iemax, rbig. // The following define the basic machine-dependent constants. // For portability, the PORT subprograms "ilmaeh" and "rlmach" // are used. For any specific computer, each of the assignment // statements can be replaced - nbig = (std::numeric_limits::max)(); // largest integer ibeta = std::numeric_limits::radix; // base for floating-point numbers it = std::numeric_limits::digits; // number of base-beta digits in mantissa iemin = std::numeric_limits::min_exponent; // minimum exponent @@ -111,8 +111,7 @@ MatrixBase::blueNorm() const eps = RealScalar(pow(double(ibeta), 1-it)); relerr = internal::sqrt(eps); // tolerance for neglecting asml abig = RealScalar(1.0/eps - 1.0); - if (RealScalar(nbig)>abig) nmax = int(abig); // largest safe n - else nmax = nbig; + initialized = true; } Index n = size(); RealScalar ab2 = b2 / RealScalar(n);