CORDIC is an acronym for COordinate Rotation
DIgital Computer. The Givens rotation-based CORDIC algorithm is one
of the most hardware-efficient algorithms available because it requires
only iterative shift-add operations (see References). The CORDIC algorithm
eliminates the need for explicit multipliers. Using CORDIC, you can
calculate various functions, such as sine, cosine, arc sine, arc cosine,
arc tangent, and vector magnitude. You can also use this algorithm
for divide, square root, hyperbolic, and logarithmic functions.

Increasing the number of CORDIC iterations can produce more
accurate results,
but doing so also increases the expense of the computation and adds
latency.

### Signal Flow Diagrams

For further details on the pre- and post-normalization process,
see Pre- and Post-Normalization.

#### CORDIC Hyperbolic Kernel

*X* is initialized to `u'+.25`

,
and *Y* is initialized to `u'-.25`

,
where `u'`

is the normalized function input.

With repeated iterations of the CORDIC hyperbolic kernel, *X* approaches $${A}_{N}\sqrt{u\text{'}}$$,
where *A*_{N} represents the
CORDIC gain. *Y* approaches `0`

.

### Pre- and Post-Normalization

For input values outside of the range of [0.5, 2) a pre- and
post-normalization process occurs. This process performs bitshifts
on the input array before passing it to the CORDIC kernel. The result
is then shifted back into the correct output range during the post-normalization
stage. For more details on this process see "Overcoming Algorithm
Input Range Limitations" in Compute Square Root Using CORDIC.

### fimath Propagation Rules

CORDIC functions discard any local `fimath`

attached
to the input.

The CORDIC functions use their own internal `fimath`

when
performing calculations:

`OverflowAction`

—`Wrap`

`RoundingMethod`

—`Floor`

The output has no attached `fimath`

.