diff options
author | Gael Guennebaud <g.gael@free.fr> | 2014-02-13 15:44:01 +0100 |
---|---|---|
committer | Gael Guennebaud <g.gael@free.fr> | 2014-02-13 15:44:01 +0100 |
commit | 32915806305081d837711305bcf57508714d0068 (patch) | |
tree | fc4843eb8ed812d2858148e388c6ad5e82f7ee88 /test | |
parent | 14422decc2583e556352408983f4f8fda3054c70 (diff) |
Fix bug #740: overflow issue in stableNorm
Diffstat (limited to 'test')
-rw-r--r-- | test/stable_norm.cpp | 14 |
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()); |