diff options
author | Gael Guennebaud <g.gael@free.fr> | 2013-07-10 21:11:41 +0200 |
---|---|---|
committer | Gael Guennebaud <g.gael@free.fr> | 2013-07-10 21:11:41 +0200 |
commit | 5a4519d2b4a816fd82be77e9aa1b2498af62375c (patch) | |
tree | 48e49ba11ac3d9844f31dfd1b6c1159b6a145883 /Eigen | |
parent | f850550e3e3e98d9dcbdafbf50cc064367f5eb98 (diff) |
Revisit the implementation of random_default_impl for integer to make sure avoid overflows and compiler warnings.
Diffstat (limited to 'Eigen')
-rw-r--r-- | Eigen/src/Core/MathFunctions.h | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/Eigen/src/Core/MathFunctions.h b/Eigen/src/Core/MathFunctions.h index 5df2d8bca..2bfc5ebd9 100644 --- a/Eigen/src/Core/MathFunctions.h +++ b/Eigen/src/Core/MathFunctions.h @@ -510,11 +510,10 @@ struct random_default_impl<Scalar, false, true> #else enum { rand_bits = floor_log2<(unsigned int)(RAND_MAX)+1>::value, scalar_bits = sizeof(Scalar) * CHAR_BIT, - shift = EIGEN_PLAIN_ENUM_MAX(0, int(rand_bits) - int(scalar_bits)) + shift = EIGEN_PLAIN_ENUM_MAX(0, int(rand_bits) - int(scalar_bits)), + offset = NumTraits<Scalar>::IsSigned ? (1 << (EIGEN_PLAIN_ENUM_MIN(rand_bits,scalar_bits)-1)) : 0 }; - Scalar x = Scalar(std::rand() >> shift); - Scalar offset = NumTraits<Scalar>::IsSigned ? Scalar(1 << (rand_bits-1)) : Scalar(0); - return x - offset; + return Scalar((std::rand() >> shift) - offset); #endif } }; |