Beginning from the first publications in CORDIC field many authors

(Lekven and Uno, Racy, Perle et al) indicated to principal opportunity

of using the same approach for computation of the functions :arcsin, arcos,

exp, ln, sh, Arsh etc. But it was noticed that direct using of CORDIC

gives too much errors in some points. The reason of that was "nonconvergence"

of the classical CORDIC algorithms for these functions.

For convergence of iterative process it is necessary that any "wrong" i-th

iteration could be "corrected" in the subsequent (i+1)-th, (i+2)-th, (i+3)-th,

etc. etc. iterations. Or, in other words, at least a half of the "wrong"

i-th iteration could be corrected in the next (i+1)-th iteration.

For atan(1/2^i) this condition is satisfied, i.e.:

atan(1/2^(i+1)) > 1/2*atan(1/2^i)

But for functions ln(1+1/2^i), ln(1-1/2^i), atanh(1/2^i) this condition is not

satisfied. For improving of this method it was suggested to "double" every

iteration in sense of magnitude of i , i.e. not to change the value i [the

power in the 1/2^i ], every time i.e. in every iteration, but to change

it every second iteration. At the same time it is neccessary in EVERY iteration

to control of choice of its "direction" i.e. its sign. In such way we can

guarantee the convergence. For example, for ln function:

2*ln(1+1/2^(i+1)) > 1/2*ln(1+1/2^i)

I.e. a half of "wrong" i-th iteration could be corrected by two next (i+1)-th

iterations.

So this approach was named "double iterations" (in Russian: "dvoynie

iteratsii"). It is possible to designate "double iterations" as:

i=1,1,2,2,3,3,....n,n. Therefore total number of iterations compared with

classical CORDIC increased in two times. But we can guarantee the convergence.

For functions arcsin, arccos the necessity of "double" iterations is connected

with the magnitude of K(i). For example for evaluation of function arcsinY we

should get the final y(i) equal to Y, beginning from y(0) = 0. Then the sum of

all atan(1/2^i) with corresponding signs for i=0,1,2, ... , n equal to

arcsinY.

But because of the coeffuicient K(i), in any iteration could be occur

a situation when we can do "wrong" iteration. Why? Ideally we should

correct the value of Y (argument of arcsin function) in every iteration,

multiplying it to K(i). Instead of that we multiply Y in the beginning

of iterations to the product of all K(i), i.e. to well-known coefficient

1,64..... It is the reason of the possible "wrong" iterations.

In such case using of "double iterations" can solve this problem as well,

because in any i-th step it is possible to do only one "wrong" iteration which

could be corrected additional "right" iteration (it is very easy to show in

graphical way). In other words we also need "double" iterations for arcsin

and arccos functions.

Such approach is sufficient for all (excluded Arsh and Arch) functions.

in binary system. But when we deal with nonbinary systems: decimal,

hexadecimal etc.it is sufficient to execute for ln and exp functions

evaluation to do A iterations per digit (A - radix). But for functions

arcsin and arccos it is necessary to execute 2(A-1) iterations per digit.

It is easy to notice that for binary numbers these values are equal,i.e.

if A=2, then 2(A-1)=A.

Vladimir Baykov

vlad@vlad.usr.etu.spb.ru