Квадратный корень: Вавилонский метод . * Т.е. 1003 *
function sqrt(N):
oldguess = -1
guess = 1
while abs(guess-oldguess) > 1:
oldguess = guess
guess = (guess + N/guess) / 2
return guess
Возведение в степень: путем возведения в квадрат .
function exp(base, pow):
result = 1
bits = toBinary(powr)
for bit in bits:
result = result * result
if (bit):
result = result * base
return result
, где toBinary
возвращает список / массив из 1 и 0, в первую очередь MSB, например, как реализовано этой функцией Python:
def toBinary(x):
return map(lambda b: 1 if b == '1' else 0, bin(x)[2:])
Обратите внимание, что если ваша реализация выполняется с использованием двоичных чисел, это может быть реализовано с использованием побитовых операций без необходимости в дополнительной памяти. Если вы используете десятичную дробь, вам понадобится дополнительная для хранения двоичной кодировки.
Однако существует десятичная версия алгоритма, которая выглядит примерно так:
function exp(base, pow):
lookup = [1, base, base*base, base*base*base, ...] #...up to base^9
#The above line can be optimised using exp-by-squaring if desired
result = 1
digits = toDecimal(powr)
for digit in digits:
result = result * result * lookup[digit]
return result