Mercurial > hg > octave-nkf
changeset 8995:1b097d86a61a
remove a TODO in oct-norm.cc
author | Jaroslav Hajek <highegg@gmail.com> |
---|---|
date | Wed, 18 Mar 2009 16:17:15 +0100 |
parents | a8d30dc1beec |
children | af43309a59f4 |
files | liboctave/ChangeLog liboctave/oct-norm.cc |
diffstat | 2 files changed, 12 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/liboctave/ChangeLog +++ b/liboctave/ChangeLog @@ -1,3 +1,9 @@ +2009-03-18 Jaroslav Hajek <highegg@gmail.com> + + * oct-norm.cc (get_eps): Remove that hack. + (higham): Use std::numeric_limits instead. + Include OCTAVE_QUIT. + 2009-03-16 Jason Riedy <jason@acm.org> * Sparse.cc (transpose): Eliminate the workspace by computing in
--- a/liboctave/oct-norm.cc +++ b/liboctave/oct-norm.cc @@ -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<R>::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<R>::epsilon ()); + res = higham (m, p, sqrteps, max_norm_iter, x); } else (*current_liboctave_error_handler) (p_less1_gripe);