# HG changeset patch # User Jaroslav Hajek # Date 1236981277 -3600 # Node ID a7c00773a0898ea612e338fe2001ffd389903e5d # Parent 0a58c4cd1405860ee2b7615e92e8caa6242a6fff optimize also .^-1 case diff -r 0a58c4cd1405 -r a7c00773a089 src/xpow.cc --- a/src/xpow.cc Fri Mar 13 22:33:26 2009 +0100 +++ b/src/xpow.cc Fri Mar 13 22:54:37 2009 +0100 @@ -1123,6 +1123,11 @@ for (octave_idx_type i = 0; i < a.length (); i++) result.xelem (i) = a(i) * a(i); } + else if (ib == -1) + { + for (octave_idx_type i = 0; i < a.length (); i++) + result.xelem (i) = 1.0 / a(i); + } else { for (octave_idx_type i = 0; i < a.length (); i++) @@ -1282,11 +1287,19 @@ if (xisint (b)) { - for (octave_idx_type i = 0; i < a.length (); i++) - { - OCTAVE_QUIT; - result(i) = std::pow (a(i), static_cast (b)); - } + if (b == -1) + { + for (octave_idx_type i = 0; i < a.length (); i++) + result.xelem (i) = std::conj (a(i)) / std::norm (a(i)); + } + else + { + for (octave_idx_type i = 0; i < a.length (); i++) + { + OCTAVE_QUIT; + result(i) = std::pow (a(i), static_cast (b)); + } + } } else { @@ -2425,6 +2438,11 @@ for (octave_idx_type i = 0; i < a.length (); i++) result.xelem (i) = a(i) * a(i); } + else if (ib == -1) + { + for (octave_idx_type i = 0; i < a.length (); i++) + result.xelem (i) = 1.0f / a(i); + } else { for (octave_idx_type i = 0; i < a.length (); i++) @@ -2584,11 +2602,19 @@ if (xisint (b)) { - for (octave_idx_type i = 0; i < a.length (); i++) - { - OCTAVE_QUIT; - result(i) = std::pow (a(i), static_cast (b)); - } + if (b == -1) + { + for (octave_idx_type i = 0; i < a.length (); i++) + result.xelem (i) = std::conj (a(i)) / std::norm (a(i)); + } + else + { + for (octave_idx_type i = 0; i < a.length (); i++) + { + OCTAVE_QUIT; + result(i) = std::pow (a(i), static_cast (b)); + } + } } else {