Sqrt() Algorithms Visualization

Author: Alexey Kutepov

Here I keep a collection of visualizations for algorithms that compute Square root as I experiment with them. This page is presented as is and does not claim to be a complete guide on such algorithms. You can find the source code at GitHub

I came up with this algorithm myself based on my understanding of the square root definition. If you have y it is very easy to check if it is a square root of x. You just check if y*y == x.

So the algorithm starts with defining two values: y0 = 0 and y1 = x. The value sqrt(x) lies somewhere between y0 and y1. We simply perform Binary search on them until we narrow down y0 and y1 to y == sqrt(x) with an acceptable precision.

Very slow algorithm but it works and was fun to implement and animate.

Click the plot to set the x value.

Newton's Method

The algorithm based on Newton's method is much more efficient and actually really clever. The thing about Newton's method is that it's not designed specifically for finding square roots. It's a method that finds roots of any function. (the root of a function f is a such value x that f(x) == 0)

So what you need to do given a value a the square root of which you want to find is to come up with such function f the root of which is equal to sqrt(a). That is f(sqrt(a)) == 0. A good instance of such function would be f(x) = x^2 - a. Once you've got such function you just need to apply the Newton's method on it and voilĂ ! You found sqrt(a).

The idea of Newton's method is really simple. You start with a certain approximation x[0]. And you keep computing the next approximation x[i] = x[i-1] - f(x[i-1])/f'(x[i-1]) iteratively until you've reached an acceptable precision. f'(x) is the first derivative of function f(x).

Since the derivative of a function is basically the velocity of that function at a certain point by dividing by it and subtracting it we sort of move in an opposite direction trying to reach the zero. But I personally do not fully understand how it works yet.

In case of the function f(x) = x^2 - a the next approximation looks like x[i] = x[i-1] - (x[i-1]^2 - a)/(2*x[i-1]).

Click the plot to set the x value.

Source Code on GitHub | Font Libre Baskerville