Develop an efficient algorithm to find the square root of a positive real number.
We learned to find square roots in school by a method similar to long
division. Unlike long division, you take TWO digits at a time
(because 10^2=100, so to find the next digit in the root you need
two digits from the number). At each stage you multiply the last digit
of the "multiplier" by 2 (to get the 2ab in (a+b)^2 = a^2 + b^2 +
2ab), and only then add another digit.
Hmmm... an example, perhaps, square root of 200:
stage I: Start with the 2. A 1 digit root is the largest that is less than 2 when squared, that's 1, so
multiplier = 1, and 1*1=1, so the
root so far = 1.
Remainder = 2-1 = 1.
stage 2: Take down two digits:
remainder = 100. Double last digit of multiplier
multiplier = 2. Now,
find the next digit, that's the largest digit x for which (20 +
x)*x<100. It's 4, because 24*4<100, but 25*5>100. Add the 4 to
the root.
root so far = 14.
multiplier = 24. Remainder = 100 - 4*24 = 4.
stage 3: another 2 digits:
remainder = 400 (4.00 actually). Double last digit of multiplier,
multiplier = 28. Now find the next digit: 281*1 < 400, but 282*2>400, so it's 1.
root so far = 14.1.
remainder = 400-281=119.
stage 4:
remainder = 11900.
multiplier = 282. next digit = 4.
root so far = 14.14.
multiplier = 2824. remainder = 11900 - 2824*4 = 604. etc.
So square root of 200 = 14.14...