# HG changeset patch # User Jaroslav Hajek # Date 1221459078 -7200 # Node ID 3497833c876cdd0e62dba8391470b1e7f3f73c92 # Parent 8c69552f590648bcd39f2143a4dd32fcb82ef263 fix integer exponentiation with negative exponent diff -r 8c69552f5906 -r 3497833c876c liboctave/ChangeLog --- a/liboctave/ChangeLog Mon Sep 15 08:10:42 2008 +0200 +++ b/liboctave/ChangeLog Mon Sep 15 08:11:18 2008 +0200 @@ -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-14 Jaroslav Hajek Version 3.0.2 released. diff -r 8c69552f5906 -r 3497833c876c liboctave/oct-inttypes.h --- a/liboctave/oct-inttypes.h Mon Sep 15 08:10:42 2008 +0200 +++ b/liboctave/oct-inttypes.h Mon Sep 15 08:11:18 2008 +0200 @@ -348,10 +348,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;