有谁知道,C ++的特征库在方法Random()中使用哪种算法:
如果eigen将此决定传递给编译器(使用其标准方法创建伪随机数),那么我想知道g ++(gcc49 4.9.2_2)使用哪种算法作为默认值。
非常感谢任何有用的提示。
答案 0 :(得分:3)
正如Paul R所指出的那样,默认是只调用rand
。如果您查看Eigen / src / Core / MathFunctions.h,您将找到默认值:
template<typename Scalar>
struct random_default_impl<Scalar, false, false>
{
static inline Scalar run(const Scalar& x, const Scalar& y)
{
return x + (y-x) * Scalar(std::rand()) / Scalar(RAND_MAX);
}
static inline Scalar run()
{
return run(Scalar(NumTraits<Scalar>::IsSigned ? -1 : 0), Scalar(1));
}
};
或主题的变体(针对不同的变量类型)。