Быстрый вопрос:
рассмотрите это (неправильное) приведение от двойного к длинному целому:
Eigen::VectorXd Price = Map<VectorXd>(price, n);
double TickFactor = 1.0 / TickSize;
Eigen::VectorXi IntPrice = (Price * TickFactor).cast <long int> ();
, что дает следующую ошибку (Eigen 3.3.5, g ++ 7.3.0):
eigen/Eigen/src/Core/util/StaticAssert.h:33:40: error: static assertion failed: YOU_MIXED_DIFFERENT_NUMERIC_TYPES__YOU_NEED_TO_USE_THE_CAST_METHOD_OF_MATRIXBASE_TO_CAST_NUMERIC_TYPES_EXPLICITLY
#define EIGEN_STATIC_ASSERT(X,MSG) static_assert(X,#MSG);
Теперь это компилируется:
Eigen::VectorXi IntPrice = (Price * TickFactor).cast <int> ();
вот мой вопрос.Допускает ли указанная выше строка значения (Price * TickFactor)
, превышающие верхний предел значения short int
?- что бы это ни было в текущей системе, скажем, 33K.