CORDIC, short for coordinate rotation digital computer, is a simple and efficient algorithm to calculate trigonometric functions, hyperbolic functions, square roots, multiplications, divisions, exponentials, and logarithms with arbitrary base, typically converging with one digit (or bit) per iteration. CORDIC is therefore an example of a digit-by-digit algorithm.<!-- however, there are other digit-by-digit algorithms, which are not related to CORDIC, see f.e. http://www.cs.nyu.edu/cs/faculty/overton/book/docs/KahanTalk.pdf --> The original system is sometimes referred to as Volder's algorithm.

CORDIC and closely related methods known as pseudo-multiplication and pseudo-division or factor combining are commonly used when no hardware multiplier is available (e.g. in simple microcontrollers and field-programmable gate arrays or FPGAs), as the only operations they require are addition, subtraction, bitshift and lookup tables. As such, they all belong to the class of shift-and-add algorithms. In computer science, CORDIC is often used to implement floating-point arithmetic when the target platform lacks hardware multiply for cost or space reasons. This was the case for most early microcomputers based on processors like the MOS 6502 and Zilog Z80.

Over the years, a number of variations on the concept emerged, including circular CORDIC (Jack E. Volder), it was proposed to use the double iterations method for the implementation of the functions: arcsine, arccosine, natural logarithm, exponential function, as well as for the calculation of the hyperbolic functions. Double iterations method consists in the fact that unlike the classical CORDIC method, where the iteration step value changes every time, i.e. on each iteration, in the double iteration method, the iteration step value is repeated twice and changes only through one iteration. At the same time, when the value of i is unchanged, the sign (direction) of the iteration, i.e., + or - (clockwise or counterclockwise) depends on the sign of the variable being reduced to zero. Hence the designation for the degree indicator for double iterations appeared: <math>i = 0, 0, 1, 1, 2, 2\dots</math>. Whereas with ordinary iterations: <math>i = 0, 1, 2\dots</math>. The double iteration method guarantees the convergence of the method throughout the valid range of argument changes.

The generalization of the CORDIC convergence problems for the arbitrary positional number system with radix <math>R</math> showed that for the functions sine, cosine, arctangent, it is enough to perform <math>R - 1</math> iterations for each value of i (i = 0 or 1 to n, where n is the number of digits), i.e. for each digit of the result. For the natural logarithm, exponential, hyperbolic sine, cosine and arctangent, <math>R</math> iterations should be performed for each value <math>i</math>. For the functions arcsine and arccosine, two <math>R - 1</math> iterations should be performed for each number digit, i.e. for each value of <math>i</math>.

Further reading

  • (NB. DIVIC stands for DIgital Variable Increments Computer. Some sources erroneously refer to this as by J. M. Parini.)
  • ([https://patents.google.com/patent/US3576983])
  • ([http://www.hparchive.com/Journals/HPJ-1977-05.pdf])
  • ([http://www.hparchive.com/Journals/HPJ-1977-06.pdf])
  • ([http://www.hparchive.com/Journals/HPJ-1977-11.pdf])
  • ([http://www.hparchive.com/Journals/HPJ-1978-04.pdf])
  • (about CORDIC in TI-58/TI-59)
  • <!-- Springer US, softcover reprint of hardcover 1st ed. 1994 (2010) ISBN 144194740X / 978-1441947406 -->
  • (x+268 pages)
  • Soft CORDIC IP (verilog HDL code)
  • CORDIC Bibliography Site
  • BASIC Stamp, CORDIC math implementation
  • CORDIC implementation in verilog
  • CORDIC Vectoring with Arbitrary Target Value
  • Python CORDIC implementation
  • Simple C code for fixed-point CORDIC
  • Tutorial and MATLAB Implementation – Using CORDIC to Estimate Phase of a Complex Number (archive.org)
  • Descriptions of hardware CORDICs in Arx with testbenches in C++ and VHDL
  • An Introduction to the CORDIC algorithm
  • Implementation of the CORDIC Algorithm in a Digital Down-Converter
  • Implementation of the CORDIC Algorithm: fixed point C code for trigonometric and hyperbolic functions, C code for test and performance verification