# HG changeset patch # User Jaroslav Hajek # Date 1237389435 -3600 # Node ID 1b097d86a61a6ccd28337bc4699e260d8f34911d # Parent a8d30dc1beecd363afa8c8654a76f00f10b2b7fa remove a TODO in oct-norm.cc diff -r a8d30dc1beec -r 1b097d86a61a liboctave/ChangeLog --- a/liboctave/ChangeLog Wed Mar 18 12:06:46 2009 +0100 +++ b/liboctave/ChangeLog Wed Mar 18 16:17:15 2009 +0100 @@ -1,3 +1,9 @@ +2009-03-18 Jaroslav Hajek + + * oct-norm.cc (get_eps): Remove that hack. + (higham): Use std::numeric_limits instead. + Include OCTAVE_QUIT. + 2009-03-16 Jason Riedy * Sparse.cc (transpose): Eliminate the workspace by computing in diff -r a8d30dc1beec -r 1b097d86a61a liboctave/oct-norm.cc --- a/liboctave/oct-norm.cc Wed Mar 18 12:06:46 2009 +0100 +++ b/liboctave/oct-norm.cc Wed Mar 18 16:17:15 2009 +0100 @@ -413,6 +413,7 @@ RR lambda = 0, mu = 0; for (octave_idx_type k = 0; k < m.columns (); k++) { + OCTAVE_QUIT; VectorT col (m.column (k)); if (k > 0) higham_subp (y, col, 4*k, p, lambda, mu); @@ -430,6 +431,7 @@ int iter = 0; while (iter < maxiter) { + OCTAVE_QUIT; y = m*x; gamma1 = gamma; gamma = vector_norm (y, p); @@ -449,9 +451,6 @@ return gamma; } -// TODO: is there a better way? -inline float get_eps (float) { return FLT_EPSILON; } -inline double get_eps (double) { return DBL_EPSILON; } // derive column vector and SVD types static const char *p_less1_gripe = "xnorm: p must be at least 1"; @@ -477,7 +476,8 @@ else if (p > 1) { VectorT x; - res = higham (m, p, std::sqrt (get_eps (p)), max_norm_iter, x); + const R sqrteps = std::sqrt (std::numeric_limits::epsilon ()); + res = higham (m, p, sqrteps, max_norm_iter, x); } else (*current_liboctave_error_handler) (p_less1_gripe); @@ -497,7 +497,8 @@ else if (p > 1) { VectorT x; - res = higham (m, p, std::sqrt (get_eps (p)), max_norm_iter, x); + const R sqrteps = std::sqrt (std::numeric_limits::epsilon ()); + res = higham (m, p, sqrteps, max_norm_iter, x); } else (*current_liboctave_error_handler) (p_less1_gripe);