[comp.graphics] Approximating Square Root

doug@xdos.UUCP (Doug Merritt) (11/27/89)

Quick note on binary-search approximations to e.g. square root:
if you pick an initial guess badly, binary search will converge
very slowly on the real answer, about 1 iteration per bit of precision.
For IEEE floating point with 55 bits of mantissa, this means 55 iterations.
A good initial guess will dramatically increase the speed.

For most simple functions like square root, cube root, etc, you can get
an excellent order-of-magnitude first guess by manipulating the exponent.
E.g. for a number == X * 2^10 (floating point is typically implemented
using base two exponents), a good first guess would be 2 ^ (10/2) ==
2^5. The exponent is approximately the logarithm (base two) of the
number, so dividing the exponent by two approximates taking the square root.

Similarly for cube root: divide exponent by three.

In theory, what this should do is eliminate the iterations normally
required for finding the correct exponent in the course of binary search,
which might save 8 iterations, a significant percentage. That's worst
case. Average case is even better, cutting an average of 50 to 60 iterations
down to around 20.
	Doug
-- 
Doug Merritt		{pyramid,apple}!xdos!doug
Member, Crusaders for a Better Tomorrow		Professional Wildeyed Visionary