diff --git a/FixedPointSharp/fixnum/fixmath.cs b/FixedPointSharp/fixnum/fixmath.cs index 0f07347..3568ace 100644 --- a/FixedPointSharp/fixnum/fixmath.cs +++ b/FixedPointSharp/fixnum/fixmath.cs @@ -36,7 +36,10 @@ public static fp Pow2(fp num) { if (num.value > 1638400) { return fp.max; } - + + var isNeg = num.value < 0; + if (isNeg) num = -num; + var i = num.AsInt; num = Fractions(num) * _pow2Number1 + fp._1; num *= num; @@ -46,7 +49,10 @@ public static fp Pow2(fp num) { num *= num; num *= num; num *= num; - return num * num * fp.Parse(1 << i); + + var result = num * num * fp.Parse(1 << i); + if (isNeg) result = fp._1 / result; + return result; } ///Approximate version of Exp @@ -334,4 +340,4 @@ public static fp Exp(fp num) { return result; } } -} \ No newline at end of file +}