[eigen] Combining different types |

[ Thread Index |
Date Index
| More lists.tuxfamily.org/eigen Archives
]

`I understand that Eigen does not allow adding vectors of different
``types. For example, the code
`
VectorXf f(3);
VectorXd d(3);
cout << (f+d) << endl;
yields the compilation error
YOU_MIXED_DIFFERENT_NUMERIC_TYPES__YOU_NEED_TO_USE_THE_CAST_METHOD_OF_MATRIXBASE_TO_CAST_NUMERIC_TYPES_EXPLICITLY

`I also understand the Eigen has this restriction because of the
``difficulty (correctness?) of doing vectorization with such expressions.
``However, casting a float vector to a double vector is, of course,
``inefficient. Does it make sense to move the prohibition of mixing types
``to be a pre-condition for vectorization, and allow the mixing of types
``in general in Eigen?
`

`A concrete situation where this is desirable is where a bunch of
``parameters can be stored in a vector of floats (to save space), but the
``main calculations are done in double, to maintain sufficient precision.
`
The following template
template< typename A, typename B >
struct promote
{
typedef decltype( A(0) + B(0) ) type;
};

`makes the promotion type explicit. [In my actual situation, this does
``not work with a new scalar type, adouble (from ADOL-C) that I am using,
``but this can be handled by writing down specializations for the above
``template].
`

`I have been able to, largely, work around the prohibition of mixing
``types with adouble by adding small amounts of code to specialize the
``existing Eigen infrastructure that does the checking. However, I have
``not been able to solve this definitively, for adouble, and may need to
``(mildly) constrain my code, instead. It would be more elegant if Eigen,
``from ground up, allowed the user the option to mix types
`
Any comments much appreciated ...