Index: tnt_linalg.h =================================================================== --- tnt_linalg.h (revision 37575) +++ tnt_linalg.h (revision 37576) @@ -11,7 +11,6 @@ namespace TNT { namespace Linear_Algebra { - using namespace std; /**

@@ -442,12 +441,12 @@ Real f = Real(0.0); Real tst1 = Real(0.0); - Real eps = pow(2.0,-52.0); + Real eps = std::pow(2.0,-52.0); for (int l = 0; l < n; l++) { // Find small subdiagonal element - tst1 = max(tst1,abs(d[l]) + abs(e[l])); + tst1 = std::max(tst1,abs(d[l]) + abs(e[l])); int m = l; // Original while-loop from Java code @@ -677,7 +676,7 @@ int n = nn-1; int low = 0; int high = nn-1; - Real eps = pow(2.0,-52.0); + Real eps = std::pow(2.0,-52.0); Real exshift = Real(0.0); Real p=0,q=0,r=0,s=0,z=0,t,w,x,y; @@ -689,7 +688,7 @@ d[i] = H[i][i]; e[i] = Real(0.0); } - for (int j = max(i-Real(1.0)); j < nn; j++) { + for (int j = std::max(i-Real(1.0)); j < nn; j++) { norm = norm + abs(H[i][j]); } } @@ -920,7 +919,7 @@ // Column modification - for (int i = 0; i <= min(n,k+3); i++) { + for (int i = 0; i <= std::min(n,k+3); i++) { p = x * H[i][k] + y * H[i][k+1]; if (notlast) { p = p + z * H[i][k+2]; @@ -1069,7 +1068,7 @@ // Overflow control - t = max(abs(H[i][n-1]),abs(H[i][n])); + t = std::max(abs(H[i][n-1]),abs(H[i][n])); if ((eps * t) * t > 1) { for (int j = i; j <= n; j++) { H[j][n-1] = H[j][n-1] / t; @@ -1096,7 +1095,7 @@ for (int j = nn-1; j >= low; j--) { for (int i = low; i <= high; i++) { z = Real(0.0); - for (int k = low; k <= min(j,high); k++) { + for (int k = low; k <= std::min(j,high); k++) { z = z + V[i][k] * H[k][j]; } V[i][j] = z; @@ -1330,7 +1329,7 @@ // Most of the time is spent in the following dot product. - int kmax = min(i,j); + int kmax = std::min(i,j); double s = Real(0.0); for (int k = 0; k < kmax; k++) { s += LUrowi[k]*LUcolj[k]; @@ -1881,8 +1880,8 @@ m = Arg.num_rows(); n = Arg.num_cols(); - int nu = min(m,n); - s = Vector(min(m+1,n)); + int nu = std::min(m,n); + s = Vector(std::min(m+1,n)); U = Matrix(m, nu, Real(0)); V = Matrix(n,n); Vector e(n); @@ -1895,9 +1894,9 @@ // Reduce A to bidiagonal form, storing the diagonal elements // in s and the super-diagonal elements in e. - int nct = min(m-1,n); - int nrt = max(0,min(n-2,m)); - for (k = 0; k < max(nct,nrt); k++) { + int nct = std::min(m-1,n); + int nrt = std::max(0,std::min(n-2,m)); + for (k = 0; k < std::max(nct,nrt); k++) { if (k < nct) { // Compute the transformation for the k-th column and @@ -1999,7 +1998,7 @@ // Set up the final bidiagonal matrix or order p. - int p = min(n,m+1); + int p = std::min(n,m+1); if (nct < n) { s[nct] = A[nct][nct]; } @@ -2075,7 +2074,7 @@ int pp = p-1; int iter = 0; - double eps = pow(2.0,-52.0); + double eps = std::pow(2.0,-52.0); while (p > 0) { int k=0; int kase=0; @@ -2185,7 +2184,7 @@ // Calculate the shift. - double scale = max(max(max(max( + double scale = std::max(std::max(std::max(std::max( abs(s[p-1]),abs(s[p-2])),abs(e[p-2])), abs(s[k])),abs(e[k])); double sp = s[p-1]/scale; @@ -2294,7 +2293,7 @@ void getU (Matrix &A) { - int minm = min(m+1,n); + int minm = std::min(m+1,n); A = Matrix(m, minm); @@ -2332,13 +2331,13 @@ } } - /** Two norm (max(S)) */ + /** Two norm (std::max(S)) */ double norm2 () { return s[0]; } - /** Two norm of condition number (max(S)/min(S)) */ + /** Two norm of condition number (std::max(S)/std::min(S)) */ double cond () { return s[0]/s[min(m,n)-1]; @@ -2350,8 +2349,8 @@ int rank () { - double eps = pow(2.0,-52.0); - double tol = max(m,n)*s[0]*eps; + double eps = std::pow(2.0,-52.0); + double tol = std::max(m,n)*s[0]*eps; int r = 0; for (int i = 0; i < s.dim(); i++) { if (s[i] > tol) { Index: jama_eig.h =================================================================== --- jama_eig.h (revision 37575) +++ jama_eig.h (revision 37576) @@ -12,8 +12,6 @@ #include // for abs() below -using namespace TNT; -using namespace std; namespace JAMA { @@ -120,7 +118,7 @@ Real scale = 0.0; Real h = 0.0; for (int k = 0; k < i; k++) { - scale = scale + abs(d[k]); + scale = scale + std::abs(d[k]); } if (scale == 0.0) { e[i] = d[i-1]; @@ -231,17 +229,17 @@ Real f = 0.0; Real tst1 = 0.0; - Real eps = pow(2.0,-52.0); + Real eps = std::pow(2.0,-52.0); for (int l = 0; l < n; l++) { // Find small subdiagonal element - tst1 = max(tst1,abs(d[l]) + abs(e[l])); + tst1 = std::max(tst1,std::abs(d[l]) + std::abs(e[l])); int m = l; // Original while-loop from Java code while (m < n) { - if (abs(e[m]) <= eps*tst1) { + if (std::abs(e[m]) <= eps*tst1) { break; } m++; @@ -309,7 +307,7 @@ // Check for convergence. - } while (abs(e[l]) > eps*tst1); + } while (std::abs(e[l]) > eps*tst1); } d[l] = d[l] + f; e[l] = 0.0; @@ -356,7 +354,7 @@ Real scale = 0.0; for (int i = m; i <= high; i++) { - scale = scale + abs(H[i][m-1]); + scale = scale + std::abs(H[i][m-1]); } if (scale != 0.0) { @@ -437,7 +435,7 @@ Real cdivr, cdivi; void cdiv(Real xr, Real xi, Real yr, Real yi) { Real r,d; - if (abs(yr) > abs(yi)) { + if (std::abs(yr) > std::abs(yi)) { r = yi/yr; d = yr + r*yi; cdivr = (xr + r*xi)/d; @@ -466,7 +464,7 @@ int n = nn-1; int low = 0; int high = nn-1; - Real eps = pow(2.0,-52.0); + Real eps = std::pow(2.0,-52.0); Real exshift = 0.0; Real p=0,q=0,r=0,s=0,z=0,t,w,x,y; @@ -478,8 +476,8 @@ d[i] = H[i][i]; e[i] = 0.0; } - for (int j = max(i-1,0); j < nn; j++) { - norm = norm + abs(H[i][j]); + for (int j = std::max(i-1,0); j < nn; j++) { + norm = norm + std::abs(H[i][j]); } } @@ -492,11 +490,11 @@ int l = n; while (l > low) { - s = abs(H[l-1][l-1]) + abs(H[l][l]); + s = std::abs(H[l-1][l-1]) + std::abs(H[l][l]); if (s == 0.0) { s = norm; } - if (abs(H[l][l-1]) < eps * s) { + if (std::abs(H[l][l-1]) < eps * s) { break; } l--; @@ -518,7 +516,7 @@ w = H[n][n-1] * H[n-1][n]; p = (H[n-1][n-1] - H[n][n]) / 2.0; q = p * p + w; - z = sqrt(abs(q)); + z = sqrt(std::abs(q)); H[n][n] = H[n][n] + exshift; H[n-1][n-1] = H[n-1][n-1] + exshift; x = H[n][n]; @@ -539,7 +537,7 @@ e[n-1] = 0.0; e[n] = 0.0; x = H[n][n-1]; - s = abs(x) + abs(z); + s = std::abs(x) + std::abs(z); p = x / s; q = z / s; r = sqrt(p * p+q * q); @@ -602,7 +600,7 @@ for (int i = low; i <= n; i++) { H[i][i] -= x; } - s = abs(H[n][n-1]) + abs(H[n-1][n-2]); + s = std::abs(H[n][n-1]) + std::abs(H[n-1][n-2]); x = y = 0.75 * s; w = -0.4375 * s * s; } @@ -638,16 +636,16 @@ p = (r * s - w) / H[m+1][m] + H[m][m+1]; q = H[m+1][m+1] - z - r - s; r = H[m+2][m+1]; - s = abs(p) + abs(q) + abs(r); + s = std::abs(p) + std::abs(q) + std::abs(r); p = p / s; q = q / s; r = r / s; if (m == l) { break; } - if (abs(H[m][m-1]) * (abs(q) + abs(r)) < - eps * (abs(p) * (abs(H[m-1][m-1]) + abs(z) + - abs(H[m+1][m+1])))) { + if (std::abs(H[m][m-1]) * (std::abs(q) + std::abs(r)) < + eps * (std::abs(p) * (std::abs(H[m-1][m-1]) + std::abs(z) + + std::abs(H[m+1][m+1])))) { break; } m--; @@ -668,7 +666,7 @@ p = H[k][k-1]; q = H[k+1][k-1]; r = (notlast ? H[k+2][k-1] : 0.0); - x = abs(p) + abs(q) + abs(r); + x = std::abs(p) + std::abs(q) + std::abs(r); if (x != 0.0) { p = p / x; q = q / x; @@ -709,7 +707,7 @@ // Column modification - for (int i = 0; i <= min(n,k+3); i++) { + for (int i = 0; i <= std::min(n,k+3); i++) { p = x * H[i][k] + y * H[i][k+1]; if (notlast) { p = p + z * H[i][k+2]; @@ -776,7 +774,7 @@ q = (d[i] - p) * (d[i] - p) + e[i] * e[i]; t = (x * s - z * r) / q; H[i][n] = t; - if (abs(x) > abs(z)) { + if (std::abs(x) > std::abs(z)) { H[i+1][n] = (-r - w * t) / x; } else { H[i+1][n] = (-s - y * t) / z; @@ -785,7 +783,7 @@ // Overflow control - t = abs(H[i][n]); + t = std::abs(H[i][n]); if ((eps * t) * t > 1) { for (int j = i; j <= n; j++) { H[j][n] = H[j][n] / t; @@ -801,7 +799,7 @@ // Last vector component imaginary so matrix is triangular - if (abs(H[n][n-1]) > abs(H[n-1][n])) { + if (std::abs(H[n][n-1]) > std::abs(H[n-1][n])) { H[n-1][n-1] = q / H[n][n-1]; H[n-1][n] = -(H[n][n] - p) / H[n][n-1]; } else { @@ -840,13 +838,13 @@ vr = (d[i] - p) * (d[i] - p) + e[i] * e[i] - q * q; vi = (d[i] - p) * 2.0 * q; if ((vr == 0.0) && (vi == 0.0)) { - vr = eps * norm * (abs(w) + abs(q) + - abs(x) + abs(y) + abs(z)); + vr = eps * norm * (std::abs(w) + std::abs(q) + + std::abs(x) + std::abs(y) + std::abs(z)); } cdiv(x*r-z*ra+q*sa,x*s-z*sa-q*ra,vr,vi); H[i][n-1] = cdivr; H[i][n] = cdivi; - if (abs(x) > (abs(z) + abs(q))) { + if (std::abs(x) > (std::abs(z) + std::abs(q))) { H[i+1][n-1] = (-ra - w * H[i][n-1] + q * H[i][n]) / x; H[i+1][n] = (-sa - w * H[i][n] - q * H[i][n-1]) / x; } else { @@ -858,7 +856,7 @@ // Overflow control - t = max(abs(H[i][n-1]),abs(H[i][n])); + t = std::max(std::abs(H[i][n-1]),std::abs(H[i][n])); if ((eps * t) * t > 1) { for (int j = i; j <= n; j++) { H[j][n-1] = H[j][n-1] / t; @@ -885,7 +883,7 @@ for (int j = nn-1; j >= low; j--) { for (int i = low; i <= high; i++) { z = 0.0; - for (int k = low; k <= min(j,high); k++) { + for (int k = low; k <= std::min(j,high); k++) { z = z + V[i][k] * H[k][j]; } V[i][j] = z; Index: jama_lu.h =================================================================== --- jama_lu.h (revision 37575) +++ jama_lu.h (revision 37576) @@ -9,9 +9,6 @@ #define NEAR_ZERO(val, epsilon)(((val) > -epsilon) && ((val) < epsilon)) -using namespace TNT; -using namespace std; - namespace JAMA { @@ -34,17 +31,17 @@ /* Array for internal storage of decomposition. */ - Array2D LU_; + TNT::Array2D LU_; int m, n, pivsign; - Array1D piv; + TNT::Array1D piv; - Array2D permute_copy(const Array2D &A, - const Array1D &pivot, int j0, int j1) + TNT::Array2D permute_copy(const TNT::Array2D &A, + const TNT::Array1D &pivot, int j0, int j1) { int pivotlength = pivot.dim(); - Array2D X(pivotlength, j1-j0+1); + TNT::Array2D X(pivotlength, j1-j0+1); for (int i = 0; i < pivotlength; i++) @@ -54,14 +51,14 @@ return X; } - Array1D permute_copy(const Array1D &A, - const Array1D &pivot) + TNT::Array1D permute_copy(const TNT::Array1D &A, + const TNT::Array1D &pivot) { int pivotlength = pivot.dim(); if (pivotlength != A.dim()) - return Array1D(); + return TNT::Array1D(); - Array1D x(pivotlength); + TNT::Array1D x(pivotlength); for (int i = 0; i < pivotlength; i++) @@ -78,7 +75,7 @@ @return LU Decomposition object to access L, U and piv. */ - LU (const Array2D &A) : LU_(A.copy()), m(A.dim1()), n(A.dim2()), + LU (const TNT::Array2D &A) : LU_(A.copy()), m(A.dim1()), n(A.dim2()), piv(A.dim1()) { @@ -91,7 +88,7 @@ } pivsign = 1; Real *LUrowi = 0;; - Array1D LUcolj(m); + TNT::Array1D LUcolj(m); // Outer loop. @@ -110,7 +107,7 @@ // Most of the time is spent in the following dot product. - int kmax = min(i,j); + int kmax = std::min(i,j); double s = 0.0; for (int k = 0; k < kmax; k++) { s += LUrowi[k]*LUcolj[k]; @@ -123,7 +120,7 @@ int p = j; for (int i = j+1; i < m; i++) { - if (abs(LUcolj[i]) > abs(LUcolj[p])) { + if (std::abs(LUcolj[i]) > std::abs(LUcolj[p])) { p = i; } } @@ -168,8 +165,8 @@ @return L */ - Array2D getL () { - Array2D L_(m,n); + TNT::Array2D getL () { + TNT::Array2D L_(m,n); for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { if (i > j) { @@ -188,8 +185,8 @@ @return U portion of LU factorization. */ - Array2D getU () { - Array2D U_(n,n); + TNT::Array2D getU () { + TNT::Array2D U_(n,n); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (i <= j) { @@ -206,7 +203,7 @@ @return piv */ - Array1D getPivot () { + TNT::Array1D getPivot () { return piv; } @@ -232,23 +229,23 @@ 0x0 (null) array. */ - Array2D solve (const Array2D &B) + TNT::Array2D solve (const TNT::Array2D &B) { /* Dimensions: A is mxn, X is nxk, B is mxk */ if (B.dim1() != m) { - return Array2D(0,0); + return TNT::Array2D(0,0); } if (!isNonsingular()) { - return Array2D(0,0); + return TNT::Array2D(0,0); } // Copy right hand side with pivoting int nx = B.dim2(); - Array2D X = permute_copy(B, piv, 0, nx-1); + TNT::Array2D X = permute_copy(B, piv, 0, nx-1); // Solve L*Y = B(piv,:) for (int k = 0; k < n; k++) { @@ -276,26 +273,26 @@ /** Solve A*x = b, where x and b are vectors of length equal to the number of rows in A. - @param b a vector (Array1D> of length equal to the first dimension + @param b a vector (TNT::Array1D> of length equal to the first dimension of A. - @return x a vector (Array1D> so that L*U*x = b(piv), if B is nonconformant, + @return x a vector (TNT::Array1D> so that L*U*x = b(piv), if B is nonconformant, returns 0x0 (null) array. */ - Array1D solve (const Array1D &b) + TNT::Array1D solve (const TNT::Array1D &b) { /* Dimensions: A is mxn, X is nxk, B is mxk */ if (b.dim1() != m) { - return Array1D(); + return TNT::Array1D(); } if (!isNonsingular()) { - return Array1D(); + return TNT::Array1D(); } - Array1D x = permute_copy(b, piv); + TNT::Array1D x = permute_copy(b, piv); // Solve L*Y = B(piv) for (int k = 0; k < n; k++) { Index: jama_cholesky.h =================================================================== --- jama_cholesky.h (revision 37575) +++ jama_cholesky.h (revision 37576) @@ -8,8 +8,6 @@ namespace JAMA { -using namespace TNT; - /**

For a symmetric, positive definite matrix A, this function @@ -21,8 +19,8 @@

Typical usage looks like:

-	Array2D A(n,n);
-	Array2D L;
+	TNT::Array2D A(n,n);
+	TNT::Array2D L;
 
 	 ...
 
@@ -46,16 +44,16 @@
 template 
 class Cholesky
 {
-	Array2D L_;		// lower triangular factor
+	TNT::Array2D L_;		// lower triangular factor
 	int isspd;				// 1 if matrix to be factored was SPD
 
 public:
 
 	Cholesky();
-	Cholesky(const Array2D &A);
-	Array2D getL() const;
-	Array1D solve(const Array1D &B);
-	Array2D solve(const Array2D &B);
+	Cholesky(const TNT::Array2D &A);
+	TNT::Array2D getL() const;
+	TNT::Array1D solve(const TNT::Array1D &B);
+	TNT::Array2D solve(const TNT::Array2D &B);
 	int is_spd() const;
 
 };
@@ -77,7 +75,7 @@
 	@return the lower triangular factor, L, such that L*L'=A.
 */
 template 
-Array2D Cholesky::getL() const
+TNT::Array2D Cholesky::getL() const
 {
 	return L_;
 }
@@ -89,7 +87,7 @@
 	evalutate true (1) then the factorizaiton was successful.
 */
 template 
-Cholesky::Cholesky(const Array2D &A)
+Cholesky::Cholesky(const TNT::Array2D &A)
 {
 
 
@@ -100,11 +98,11 @@
 
 	if (m != n)
 	{
-		L_ = Array2D(0,0);
+		L_ = TNT::Array2D(0,0);
 		return;
 	}
 
-	L_ = Array2D(n,n);
+	L_ = TNT::Array2D(n,n);
 
 
       // Main loop.
@@ -143,14 +141,14 @@
    						array is returned.
 */
 template 
-Array1D Cholesky::solve(const Array1D &b)
+TNT::Array1D Cholesky::solve(const TNT::Array1D &b)
 {
 	int n = L_.dim1();
 	if (b.dim1() != n)
-		return Array1D();
+		return TNT::Array1D();
 
 
-	Array1D x = b.copy();
+	TNT::Array1D x = b.copy();
 
 
       // Solve L*y = b;
@@ -185,14 +183,14 @@
    						array is returned.
 */
 template 
-Array2D Cholesky::solve(const Array2D &B)
+TNT::Array2D Cholesky::solve(const TNT::Array2D &B)
 {
 	int n = L_.dim1();
 	if (B.dim1() != n)
-		return Array2D();
+		return TNT::Array2D();
 
 
-	Array2D X = B.copy();
+	TNT::Array2D X = B.copy();
 	int nx = B.dim2();
 
 // Cleve's original code
Index: jama_svd.h
===================================================================
--- jama_svd.h	(revision 37575)
+++ jama_svd.h	(revision 37576)
@@ -13,8 +13,6 @@
 #include 
 // for abs() below
 
-using namespace TNT;
-using namespace std;
 
 namespace JAMA
 {
@@ -40,25 +38,25 @@
 {
 
 
-	Array2D U, V;
-	Array1D s;
+	TNT::Array2D U, V;
+	TNT::Array1D s;
 	int m, n;
 
   public:
 
 
-   SVD (const Array2D &Arg) {
+   SVD (const TNT::Array2D &Arg) {
 
 
       m = Arg.dim1();
       n = Arg.dim2();
-      int nu = min(m,n);
-      s = Array1D(min(m+1,n));
-      U = Array2D(m, nu, Real(0));
-      V = Array2D(n,n);
-      Array1D e(n);
-      Array1D work(m);
-	  Array2D A(Arg.copy());
+      int nu = std::min(m,n);
+      s = TNT::Array1D(std::min(m+1,n));
+      U = TNT::Array2D(m, nu, Real(0));
+      V = TNT::Array2D(n,n);
+      TNT::Array1D e(n);
+      TNT::Array1D work(m);
+	  TNT::Array2D A(Arg.copy());
       int wantu = 1;  					/* boolean */
       int wantv = 1;  					/* boolean */
 	  int i=0, j=0, k=0;
@@ -66,9 +64,9 @@
       // Reduce A to bidiagonal form, storing the diagonal elements
       // in s and the super-diagonal elements in e.
 
-      int nct = min(m-1,n);
-      int nrt = max(0,min(n-2,m));
-      for (k = 0; k < max(nct,nrt); k++) {
+      int nct = std::min(m-1,n);
+      int nrt = std::max(0,std::min(n-2,m));
+      for (k = 0; k < std::max(nct,nrt); k++) {
          if (k < nct) {
 
             // Compute the transformation for the k-th column and
@@ -170,7 +168,7 @@
 
       // Set up the final bidiagonal matrix or order p.
 
-      int p = min(n,m+1);
+      int p = std::min(n,m+1);
       if (nct < n) {
          s[nct] = A[nct][nct];
       }
@@ -246,7 +244,7 @@
 
       int pp = p-1;
       int iter = 0;
-      Real eps(pow(2.0,-52.0));
+      Real eps(std::pow(2.0,-52.0));
       while (p > 0) {
          int k=0;
 		 int kase=0;
@@ -267,7 +265,7 @@
             if (k == -1) {
                break;
             }
-            if (abs(e[k]) <= eps*(abs(s[k]) + abs(s[k+1]))) {
+            if (std::abs(e[k]) <= eps*(std::abs(s[k]) + std::abs(s[k+1]))) {
                e[k] = 0.0;
                break;
             }
@@ -280,9 +278,9 @@
                if (ks == k) {
                   break;
                }
-               Real t( (ks != p ? abs(e[ks]) : 0.) +
-                          (ks != k+1 ? abs(e[ks-1]) : 0.));
-               if (abs(s[ks]) <= eps*t)  {
+               Real t( (ks != p ? std::abs(e[ks]) : 0.) +
+                          (ks != k+1 ? std::abs(e[ks-1]) : 0.));
+               if (std::abs(s[ks]) <= eps*t)  {
                   s[ks] = 0.0;
                   break;
                }
@@ -356,9 +354,9 @@
 
                // Calculate the shift.
 
-               Real scale = max(max(max(max(
-                       abs(s[p-1]),abs(s[p-2])),abs(e[p-2])),
-                       abs(s[k])),abs(e[k]));
+               Real scale = std::max(std::max(std::max(std::max(
+                       std::abs(s[p-1]),std::abs(s[p-2])),std::abs(e[p-2])),
+                       std::abs(s[k])),std::abs(e[k]));
                Real sp = s[p-1]/scale;
                Real spm1 = s[p-2]/scale;
                Real epm1 = e[p-2]/scale;
@@ -463,11 +461,11 @@
    }
 
 
-   void getU (Array2D &A)
+   void getU (TNT::Array2D &A)
    {
-   	  int minm = min(m+1,n);
+   	  int minm = std::min(m+1,n);
 
-	  A = Array2D(m, minm);
+	  A = TNT::Array2D(m, minm);
 
 	  for (int i=0; i &A)
+   void getV (TNT::Array2D &A)
    {
    	  A = V;
    }
 
    /** Return the one-dimensional array of singular values */
 
-   void getSingularValues (Array1D &x)
+   void getSingularValues (TNT::Array1D &x)
    {
       x = s;
    }
@@ -493,8 +491,8 @@
    @return     S
    */
 
-   void getS (Array2D &A) {
-   	  A = Array2D(n,n);
+   void getS (TNT::Array2D &A) {
+   	  A = TNT::Array2D(n,n);
       for (int i = 0; i < n; i++) {
          for (int j = 0; j < n; j++) {
             A[i][j] = 0.0;
@@ -503,16 +501,16 @@
       }
    }
 
-   /** Two norm  (max(S)) */
+   /** Two norm  (std::max(S)) */
 
    Real norm2 () {
       return s[0];
    }
 
-   /** Two norm of condition number (max(S)/min(S)) */
+   /** Two norm of condition number (std::max(S)/std::min(S)) */
 
    Real cond () {
-      return s[0]/s[min(m,n)-1];
+      return s[0]/s[std::min(m,n)-1];
    }
 
    /** Effective numerical matrix rank
@@ -521,8 +519,8 @@
 
    int rank ()
    {
-      Real eps = pow(2.0,-52.0);
-      Real tol = max(m,n)*s[0]*eps;
+      Real eps = std::pow(2.0,-52.0);
+      Real tol = std::max(m,n)*s[0]*eps;
       int r = 0;
       for (int i = 0; i < s.dim(); i++) {
          if (s[i] > tol) {