radford@calgary.UUCP (Radford Neal) (06/08/87)
Many thanks to all who responded to my queries on calculation of log and exp and the CORDIC algorithm. Here is a summary of what I've found out. First, for those not in the know, CORDIC is a technique for calculating log, exp, sin, cos, arcsin, arccos, sinh, arcsinh, etc. plus sqrt and multiplication and division. It is an iterative algorithm, with each iteration requiring about three adds and two shifts, and with the number of iterations being equal (usually) to the number of bits of precision desired. This seems very attractive to me, so I asked why its not used more. (I.e. why polynomial approximation is used instead.) Results: 1) It is used more than I thought, in particular it is used in several floating-point co-processors, such as the 68881. 2) It is less attractive than it seems at first glance, because although it allows one to calculate a sin (say) in about the same time as a simple multiply algorithm would take, multiplication can be speeded up by summing partial products in parallel, but the same can't be done with CORDIC. I still think the algorithm is not used as much as it deserves: 1) It doesn't seem to be used in floating-point packages for machines without any floating-point hardware (e.g. IBM PC). At least this seems to be the case judging by the atrocious times I've observed with some of these. Its advantage over polynomial approximation seems to me to be unequivocably a factor of five at least in this case. 2) Mainframes and minis with CORDIC hardware seem never to have been built. This may not be a win, given the alternative of spending the money on faster multiply/divide, but the fact that it hasn't been tried makes one doubt whether anyone really knows. Thanks again to all who sent mail, especially Jim Valerio, Arch Robison, Les Merrill, David Hough, Wayne Schlitt, Pat Shanahan, and David Robinson. Radford Neal