24 lines
474 B
Nim
24 lines
474 B
Nim
proc `^`[T: float|int](base: T; exp: int): T =
|
|
var (base, exp) = (base, exp)
|
|
result = 1
|
|
|
|
if exp < 0:
|
|
when T is int:
|
|
if base * base != 1: return 0
|
|
elif (exp and 1) == 0: return 1
|
|
else: return base
|
|
else:
|
|
base = 1.0 / base
|
|
exp = -exp
|
|
|
|
while exp != 0:
|
|
if (exp and 1) != 0:
|
|
result *= base
|
|
exp = exp shr 1
|
|
base *= base
|
|
|
|
echo "2^6 = ", 2^6
|
|
echo "2^-6 = ", 2 ^ -6
|
|
echo "2.71^6 = ", 2.71^6
|
|
echo "2.71^-6 = ", 2.71 ^ -6
|