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/ |