Fix exponentiation operation to avoid overflow.

The exponentation implementation unnecessarily multiplied the
result with itself at the end if the exponent was an even number.
This led to overflow if result*result > high(int).
This commit is contained in:
Reimer Behrends
2015-08-14 14:32:30 +02:00
parent 134c44f3be
commit 22789a8275

View File

@@ -427,10 +427,12 @@ proc `^`*[T](x, y: T): T =
var (x, y) = (x, y)
result = 1
while y != 0:
while true:
if (y and 1) != 0:
result *= x
y = y shr 1
if y == 0:
break
x *= x
proc gcd*[T](x, y: T): T =