aboutsummaryrefslogtreecommitdiffhomepage
path: root/test/stable_norm.cpp
diff options
context:
space:
mode:
authorGravatar Gael Guennebaud <g.gael@free.fr>2014-02-13 15:44:01 +0100
committerGravatar Gael Guennebaud <g.gael@free.fr>2014-02-13 15:44:01 +0100
commit32915806305081d837711305bcf57508714d0068 (patch)
treefc4843eb8ed812d2858148e388c6ad5e82f7ee88 /test/stable_norm.cpp
parent14422decc2583e556352408983f4f8fda3054c70 (diff)
Fix bug #740: overflow issue in stableNorm
Diffstat (limited to 'test/stable_norm.cpp')
-rw-r--r--test/stable_norm.cpp14
1 files changed, 11 insertions, 3 deletions
diff --git a/test/stable_norm.cpp b/test/stable_norm.cpp
index c09fc17b7..364170acd 100644
--- a/test/stable_norm.cpp
+++ b/test/stable_norm.cpp
@@ -55,8 +55,16 @@ template<typename MatrixType> void stable_norm(const MatrixType& m)
Index rows = m.rows();
Index cols = m.cols();
- Scalar big = internal::random<Scalar>() * ((std::numeric_limits<RealScalar>::max)() * RealScalar(1e-4));
- Scalar small = internal::random<Scalar>() * ((std::numeric_limits<RealScalar>::min)() * RealScalar(1e4));
+ // get a non-zero random factor
+ Scalar factor = internal::random<Scalar>();
+ while(factor<RealScalar(1e-3))
+ factor = internal::random<Scalar>();
+ Scalar big = factor * ((std::numeric_limits<RealScalar>::max)() * RealScalar(1e-4));
+
+ factor = internal::random<Scalar>();
+ while(factor<RealScalar(1e-3))
+ factor = internal::random<Scalar>();
+ Scalar small = factor * ((std::numeric_limits<RealScalar>::min)() * RealScalar(1e4));
MatrixType vzero = MatrixType::Zero(rows, cols),
vrand = MatrixType::Random(rows, cols),
@@ -91,7 +99,7 @@ template<typename MatrixType> void stable_norm(const MatrixType& m)
VERIFY_IS_APPROX(vsmall.blueNorm(), sqrt(size)*abs(small));
VERIFY_IS_APPROX(vsmall.hypotNorm(), sqrt(size)*abs(small));
-// Test compilation of cwise() version
+ // Test compilation of cwise() version
VERIFY_IS_APPROX(vrand.colwise().stableNorm(), vrand.colwise().norm());
VERIFY_IS_APPROX(vrand.colwise().blueNorm(), vrand.colwise().norm());
VERIFY_IS_APPROX(vrand.colwise().hypotNorm(), vrand.colwise().norm());