Newton's method, we are searching for the sqrt(S):
x^2 - S == 0
f(x) = x^2 - S
f'(x) = 2x
x(n+1) = x - (x^2 - S)/(2x) = (2x^2 - x^2 + S)/(2x) = (x^2 + S)/(2x) = 0.5 * (x + S/x)
def sqrt(n):
max_err = 0.0000001
guess = 1
while 1:
print guess
guess = 0.5 * (guess + n / guess)
err = (n / guess) - guess
if abs(err) < max_err:
return guess
def isqrt(n):
max_err = 1
guess = 1
while 1:
print guess
guess = (guess + n // guess) // 2
err = (n / guess) - guess
if abs(err) < max_err:
return guess
print sqrt(2)
print isqrt(66)
The newton method is used for integer square root (isqrt) too.