Herons Method to Find Square Root of a Number
Heron's method is a simple algorithm to find the square root of any number. It starts by guessing the square root to be mean of 1 and the number itself. This guess becomes an upper limit of the approximation while the number divided by the guess becomes the lower limit. These two limits are compared and if they match within desired number of decimal places, we stop and the guess is reported as the answer.
Problem: Find the square root of a number.
Input: A positive number N and number of decimal places P for how close the answer should be.
Output: Square root of the number.
Algorithm Flowchart
Implementation in Python
def squareroot(n, p):
"""function to compute squareroot using heron's algorithm
n is the number to calculate the squareroot of,
p is decimal points of precision"""
xg = (1 + n)/2
for i in range(1000):
xl = n / xg
xu = xg
if round(xl, p) == round(xu, p):
break
xg = (xl + xu) / 2
return(round(xl, p))
Is it correct?
To check correctness, I will compare it with built-in math.sqrt()
function. Note
that the default relative tolerance of isclose()
is 1e-09
, so I set the
precision of squareroot()
to 10
:
from math import sqrt
from math import isclose
nums = [2, 23, 165, 1867, 16498]
for n in nums:
print(isclose(sqrt(n), squareroot(n, 10)))
In [56]: for n in nums:
...: print(isclose(sqrt(n), squareroot(n, 10)))
...:
True
True
True
True
True
In [57]:
Ok, the algorithm works correctly with our few test cases. I am curious now to find how fast (or slow!) it is compared to the built-in function.