# HG changeset patch # User Jaroslav Hajek # Date 1221248053 14400 # Node ID fc45357bf50ccdb48fceb36ef92db2c5e19dc671 # Parent 3b2346046d32ad8a819b26236c575a6fc2a1436a fix integer exponentiation with negative exponent diff --git a/liboctave/ChangeLog b/liboctave/ChangeLog --- a/liboctave/ChangeLog +++ b/liboctave/ChangeLog @@ -1,3 +1,8 @@ +2008-09-12 Jaroslav Hajek + + * oct-inttypes.h (pow (const octave_int&, const octave_int&)): + Handle negative exponent correctly. + 2008-08-19 David Bateman * oct-inttypes.h (template inline T2 diff --git a/liboctave/oct-inttypes.h b/liboctave/oct-inttypes.h --- a/liboctave/oct-inttypes.h +++ b/liboctave/oct-inttypes.h @@ -481,10 +481,15 @@ octave_int zero = octave_int (0); octave_int one = octave_int (1); - if (b == zero) + if (b == zero || a == one) retval = one; else if (b < zero) - retval = zero; + { + if (std::numeric_limits::is_signed && a.value () == -1) + retval = (b.value () % 2) ? a : one; + else + retval = zero; + } else { octave_int a_val = a;