bool MatrixFloat::add(const MatrixFloat &a,const MatrixFloat &b){ const unsigned int M = a.getNumRows(); const unsigned int N = a.getNumCols(); if( M != b.getNumRows() ){ errorLog << "add(const MatrixFloat &a,const MatrixFloat &b) - Failed to add matrix! The rows do not match!"; errorLog << " a rows: " << M << " b rows: " << b.getNumRows() << std::endl; return false; } if( N != b.getNumCols() ){ errorLog << "add(const MatrixFloat &a,const MatrixFloat &b) - Failed to add matrix! The columns do not match!"; errorLog << " a cols: " << N << " b cols: " << b.getNumCols() << std::endl; return false; } resize( M, N ); UINT i; //Using direct pointers really helps speed up the computation time Float *pa = a.getData(); Float *pb = b.getData(); const unsigned int size = M*N; for(i=0; i<size; i++){ dataPtr[i] = pa[i] + pb[i]; } return true; }
bool MatrixFloat::subtract(const MatrixFloat &b){ if( b.getNumRows() != rows ){ errorLog << "subtract(const MatrixFloat &b) - Failed to add matrix! The rows do not match!" << std::endl; errorLog << " rows: " << rows << " b rows: " << b.getNumRows() << std::endl; return false; } if( b.getNumCols() != cols ){ errorLog << "subtract(const MatrixFloat &b) - Failed to add matrix! The rows do not match!" << std::endl; errorLog << " cols: " << cols << " b cols: " << b.getNumCols() << std::endl; return false; } unsigned int i; //Using direct pointers really helps speed up the computation time Float *pb = b.getData(); const unsigned int size = rows*cols; for(i=0; i<size; i++){ dataPtr[i] -= pb[i]; } return true; }