--- sys/pow_int.c~ 2010-03-10 10:57:14.000000000 +0000 +++ sys/pow_int.c 2010-09-27 11:45:06.000000000 +0100 @@ -28,20 +28,23 @@ double gsl_pow_int(double x, int n) { double value = 1.0; + unsigned int un; if(n < 0) { x = 1.0/x; - n = -n; + un = -n; + } else { + un = n; } /* repeated squaring method * returns 0.0^0 = 1.0, so continuous in x */ do { - if(n & 1) value *= x; /* for n odd */ - n >>= 1; + if(un & 1) value *= x; /* for n odd */ + un >>= 1; x *= x; - } while (n); + } while (un); return value; }