release of tvmet (inactive for 2 years and developer unreachable) as the basis for eigen2, because it provides seemingly good expression template mechanisms, we want that, and it would take years to reinvent that wheel. We'll see. So this commit imports the last tvmet release.
45 lines
1.0 KiB
C++
45 lines
1.0 KiB
C++
/*
|
|
* $Id: aliasing.cc,v 1.2 2004/03/26 07:58:06 opetzold Exp $
|
|
*
|
|
* This example shows the problem with aliasing mentioned at
|
|
* http://tvmet.sourceforge.net/notes.html#alias
|
|
*/
|
|
|
|
#include <iostream>
|
|
#include <algorithm>
|
|
#include <tvmet/Matrix.h>
|
|
#include <tvmet/util/Incrementor.h>
|
|
|
|
using std::cout; using std::endl;
|
|
using namespace tvmet;
|
|
|
|
typedef Matrix<double,3,3> matrix_type;
|
|
|
|
int main()
|
|
{
|
|
matrix_type A, B;
|
|
matrix_type C;
|
|
|
|
std::generate(A.begin(), A.end(),
|
|
tvmet::util::Incrementor<matrix_type::value_type>());
|
|
std::generate(B.begin(), B.end(),
|
|
tvmet::util::Incrementor<matrix_type::value_type>());
|
|
|
|
cout << "A = " << A << endl;
|
|
cout << "B = " << B << endl;
|
|
|
|
// matrix prod without aliasing
|
|
C = A * B;
|
|
cout << "C = A * B = " << C << endl;
|
|
|
|
// work around for aliasing
|
|
matrix_type temp_A(A);
|
|
A = temp_A * B;
|
|
cout << "matrix_type temp_A(A);\n"
|
|
<< "A = temp_A * B = " << A << endl;
|
|
|
|
// this shows the aliasing problem
|
|
A = A * B;
|
|
cout << "A = A * B = " << A << endl;
|
|
}
|