CPPLapack Code
Status: Beta
Brought to you by:
yonishi
--- a/trunk/include/_dgbmatrix-/_dgbmatrix-_dgbmatrix.hpp +++ b/trunk/include/_dgbmatrix-/_dgbmatrix-_dgbmatrix.hpp @@ -13,8 +13,9 @@ if(matA.kl>matB.kl && matA.ku>matB.ku){ for(long i=0; i<matB.m; i++){ - for(long j=std::max(long(0),i-matB.kl); j<std::min(matB.n,i+matB.ku+1); j++){ - matA(i,j)+=matB(i,j); + const long jmax =std::min(matB.n,i+matB.ku+1); + for(long j=std::max(long(0),i-matB.kl); j<jmax; j++){ + matA(i,j) += matB(i,j); } } @@ -24,8 +25,9 @@ else if(matB.kl>matA.kl && matB.ku>matA.ku){ for(long i=0; i<matA.m; i++){ - for(long j=std::max(long(0),i-matA.kl); j<std::min(matA.n,i+matA.ku+1); j++){ - matB(i,j)+=matA(i,j); + const long jmax =std::min(matA.n,i+matA.ku+1); + for(long j=std::max(long(0),i-matA.kl); j<jmax; j++){ + matB(i,j) += matA(i,j); } } @@ -38,11 +40,13 @@ newmat.zero(); for(long i=0; i<matA.m; i++){ - for(long j=std::max(long(0),i-matA.kl); j<std::min(matA.n,i+matA.ku+1); j++){ - newmat(i,j)+=matA(i,j); + const long jmax1 =std::min(matA.n,i+matA.ku+1); + for(long j=std::max(long(0),i-matA.kl); j<jmax1; j++){ + newmat(i,j) += matA(i,j); } - for(long j=std::max(long(0),i-matB.kl); j<std::min(matB.n,i+matB.ku+1); j++){ - newmat(i,j)+=matB(i,j); + const long jmax2 =std::min(matB.n,i+matB.ku+1); + for(long j=std::max(long(0),i-matB.kl); j<jmax2; j++){ + newmat(i,j) += matB(i,j); } } @@ -67,8 +71,9 @@ if(matA.kl>matB.kl && matA.ku>matB.ku){ for(long i=0; i<matB.m; i++){ - for(long j=std::max(long(0),i-matB.kl); j<std::min(matB.n,i+matB.ku+1); j++){ - matA(i,j)-=matB(i,j); + const long jmax =std::min(matB.n,i+matB.ku+1); + for(long j=std::max(long(0),i-matB.kl); j<jmax; j++){ + matA(i,j) -= matB(i,j); } } @@ -81,11 +86,13 @@ newmat.zero(); for(long i=0; i<matA.m; i++){ - for(long j=std::max(long(0),i-matA.kl); j<std::min(matA.n,i+matA.ku+1); j++){ - newmat(i,j)+=matA(i,j); + const long jmax1 =std::min(matA.n,i+matA.ku+1); + for(long j=std::max(long(0),i-matA.kl); j<jmax1; j++){ + newmat(i,j) += matA(i,j); } - for(long j=std::max(long(0),i-matB.kl); j<std::min(matB.n,i+matB.ku+1); j++){ - newmat(i,j)-=matB(i,j); + const long jmax2 =std::min(matB.n,i+matB.ku+1); + for(long j=std::max(long(0),i-matB.kl); j<jmax2; j++){ + newmat(i,j) -= matB(i,j); } } @@ -112,10 +119,11 @@ newmat.zero(); for(long i=0; i<newmat.m; i++){ - for(long j=std::max(long(0),i-newmat.kl); j<std::min(newmat.n,i+newmat.ku+1); j++){ - for(long k=std::max( std::max(long(0),i-matA.kl), std::max(long(0),j-matB.ku) ); - k< std::min( std::min(matA.n,i+matA.ku+1), std::min(matB.m,j+matB.kl+1) ); k++){ - newmat(i,j)+= matA(i,k)*matB(k,j); + const long jmax =std::min(newmat.n,i+newmat.ku+1); + for(long j=std::max(long(0),i-newmat.kl); j<jmax; j++){ + const long kmax =std::min( std::min(matA.n,i+matA.ku+1), std::min(matB.m,j+matB.kl+1) ); + for(long k=std::max( std::max(long(0),i-matA.kl), std::max(long(0),j-matB.ku) ); k<kmax; k++){ + newmat(i,j) += matA(i,k)*matB(k,j); } } }
--- a/trunk/include/_dgbmatrix-/_dgbmatrix-_dgematrix.hpp +++ b/trunk/include/_dgbmatrix-/_dgbmatrix-_dgematrix.hpp @@ -12,8 +12,9 @@ #endif//CPPL_DEBUG for(long i=0; i<matA.m; i++){ - for(long j=std::max(long(0),i-matA.kl); j<std::min(matA.n,i+matA.ku+1); j++){ - matB(i,j)+=matA(i,j); + const long jmax =std::min(matA.n,i+matA.ku+1); + for(long j=std::max(long(0),i-matA.kl); j<jmax; j++){ + matB(i,j) += matA(i,j); } } @@ -35,8 +36,9 @@ #endif//CPPL_DEBUG for(long i=0; i<matA.m; i++){ - for(long j=std::max(long(0),i-matA.kl); j<std::min(matA.n,i+matA.ku+1); j++){ - matB(i,j) =matA(i,j)-matB(i,j); + const long jmax =std::min(matA.n,i+matA.ku+1); + for(long j=std::max(long(0),i-matA.kl); j<jmax; j++){ + matB(i,j) = matA(i,j)-matB(i,j); } } @@ -62,8 +64,9 @@ for(long i=0; i<newmat.m; i++){ for(long j=0; j<newmat.n; j++){ - for(long k=std::max(long(0),i-matA.kl); k<std::min(matA.n,i+matA.ku+1); k++){ - newmat(i,j)+=matA(i,k)*matB(k,j); + const long kmax =std::min(matA.n,i+matA.ku+1); + for(long k=std::max(long(0),i-matA.kl); k<kmax; k++){ + newmat(i,j) += matA(i,k)*matB(k,j); } } }