Re: [eigen] On lazy evaluation and temporary matrices

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


It looks like an alignement problem. You should ensure "numbers" is aligned, see bottom of http://eigen.tuxfamily.org/dox-devel/

(I assume you use the devel branch.. 3.0beta*)

regards,

--

Thomas Capricelli <orzel@xxxxxxxxxxxxxxx>

http://www.freehackers.org/thomas

On Thursday 25 November 2010 02:01:48 Jose Luis Blanco wrote:

> Hi guys,

>

> I need the help of someone knowing the inner workings of Eigen. I've

> spent a few days stuck debugging an error in some silly computations

> with Eigen matrices, and want to rule out potential errors...

> Consider this code:

>

> ======================

> void func( Matrix<...> &m_out )

> {

> Matrix<...> I = ....

> const double numbers[] = { 1.0, x(), -y()*x() , whatever, .... };

> m_out = I * Matrix<...>(numbers);

> }

>

> int main()

> {

> Matrix<...> M;

> func(M);

> cout << M << endl;

> }

> ======================

>

> Is it a problem for the temporary object "Matrix<...>(numbers)" to be

> created with a pointer to memory on the stack, while the evaluation of

> the object for the matrix product is actually evaluated *out* of that

> function (where obviously that pointer is invalid)??

>

> I ask because I'm having a very erratic behavior in code like above

> (on GCC doesn't work, it does on MSVC; adding a "cout << ..." for an

> unrelated matrix changes the result, etc...).

> Is it necessary to use instead:

>

> ( I * Matrix<...>(numbers) ).eval();

>

> or not even with this .eval() is my code correct?

> I'm still having random wrong matrix elements with and without eval(),

> so I wanted to be sure on this part before keep on debugging...

>

> Thanks for your time!

> JL

>

>

>



Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/