mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-07-12 16:11:49 +08:00
Revisit the implementation of random_default_impl for integer to make sure avoid overflows and compiler warnings.
This commit is contained in:
parent
f850550e3e
commit
5a4519d2b4
@ -510,11 +510,10 @@ struct random_default_impl<Scalar, false, true>
|
|||||||
#else
|
#else
|
||||||
enum { rand_bits = floor_log2<(unsigned int)(RAND_MAX)+1>::value,
|
enum { rand_bits = floor_log2<(unsigned int)(RAND_MAX)+1>::value,
|
||||||
scalar_bits = sizeof(Scalar) * CHAR_BIT,
|
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);
|
return Scalar((std::rand() >> shift) - offset);
|
||||||
Scalar offset = NumTraits<Scalar>::IsSigned ? Scalar(1 << (rand_bits-1)) : Scalar(0);
|
|
||||||
return x - offset;
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user