diff options
-rw-r--r-- | Eigen/src/Core/MathFunctions.h | 15 | ||||
-rw-r--r-- | Eigen/src/Core/functors/BinaryFunctors.h | 14 | ||||
-rw-r--r-- | test/stable_norm.cpp | 8 |
3 files changed, 26 insertions, 11 deletions
diff --git a/Eigen/src/Core/MathFunctions.h b/Eigen/src/Core/MathFunctions.h index 20fc2be74..5df1fbfec 100644 --- a/Eigen/src/Core/MathFunctions.h +++ b/Eigen/src/Core/MathFunctions.h @@ -308,10 +308,17 @@ struct hypot_impl using std::sqrt; RealScalar _x = abs(x); RealScalar _y = abs(y); - RealScalar p = (max)(_x, _y); - if(p==RealScalar(0)) return 0; - RealScalar q = (min)(_x, _y); - RealScalar qp = q/p; + Scalar p, qp; + if(_x>_y) + { + p = _x; + qp = _y / p; + } + else + { + p = _y; + qp = _x / p; + } return p * sqrt(RealScalar(1) + qp*qp); } }; diff --git a/Eigen/src/Core/functors/BinaryFunctors.h b/Eigen/src/Core/functors/BinaryFunctors.h index ba094f5d1..157d075a7 100644 --- a/Eigen/src/Core/functors/BinaryFunctors.h +++ b/Eigen/src/Core/functors/BinaryFunctors.h @@ -167,9 +167,17 @@ template<typename Scalar> struct scalar_hypot_op { EIGEN_USING_STD_MATH(max); EIGEN_USING_STD_MATH(min); using std::sqrt; - Scalar p = (max)(_x, _y); - Scalar q = (min)(_x, _y); - Scalar qp = q/p; + Scalar p, qp; + if(_x>_y) + { + p = _x; + qp = _y / p; + } + else + { + p = _y; + qp = _x / p; + } return p * sqrt(Scalar(1) + qp*qp); } }; diff --git a/test/stable_norm.cpp b/test/stable_norm.cpp index 119b5b424..f76919af4 100644 --- a/test/stable_norm.cpp +++ b/test/stable_norm.cpp @@ -135,7 +135,7 @@ template<typename MatrixType> void stable_norm(const MatrixType& m) VERIFY(!isFinite(v.norm())); VERIFY(isNaN(v.norm())); VERIFY(!isFinite(v.stableNorm())); VERIFY(isNaN(v.stableNorm())); VERIFY(!isFinite(v.blueNorm())); VERIFY(isNaN(v.blueNorm())); -// VERIFY(!isFinite(v.hypotNorm())); //VERIFY(isNaN(v.hypotNorm())); + VERIFY(!isFinite(v.hypotNorm())); VERIFY(isNaN(v.hypotNorm())); } // +inf @@ -146,7 +146,7 @@ template<typename MatrixType> void stable_norm(const MatrixType& m) VERIFY(!isFinite(v.norm())); VERIFY(isInf(v.norm())); VERIFY(!isFinite(v.stableNorm())); VERIFY(isInf(v.stableNorm())); VERIFY(!isFinite(v.blueNorm())); VERIFY(isInf(v.blueNorm())); -// VERIFY(!isFinite(v.hypotNorm())); //VERIFY(isInf(v.hypotNorm())); + VERIFY(!isFinite(v.hypotNorm())); VERIFY(isInf(v.hypotNorm())); } // -inf @@ -157,7 +157,7 @@ template<typename MatrixType> void stable_norm(const MatrixType& m) VERIFY(!isFinite(v.norm())); VERIFY(isInf(v.norm())); VERIFY(!isFinite(v.stableNorm())); VERIFY(isInf(v.stableNorm())); VERIFY(!isFinite(v.blueNorm())); VERIFY(isInf(v.blueNorm())); -// VERIFY(!isFinite(v.hypotNorm())); VERIFY(isInf(v.hypotNorm())); + VERIFY(!isFinite(v.hypotNorm())); VERIFY(isInf(v.hypotNorm())); } // mix @@ -171,7 +171,7 @@ template<typename MatrixType> void stable_norm(const MatrixType& m) VERIFY(!isFinite(v.norm())); VERIFY(isNaN(v.norm())); VERIFY(!isFinite(v.stableNorm())); VERIFY(isNaN(v.stableNorm())); VERIFY(!isFinite(v.blueNorm())); VERIFY(isNaN(v.blueNorm())); -// VERIFY(!isFinite(v.hypotNorm())); VERIFY(isNaN(v.hypotNorm())); + VERIFY(!isFinite(v.hypotNorm())); VERIFY(isNaN(v.hypotNorm())); } } |