我正在try 用C语言实现CORDIC,我必须生成算法使用的常量值.第一个ArcTanGent值列表很简单,但我在第二个列表'Kvalues.'中遇到了麻烦
% Kvalues = cumprod(1./sqrt(1 + 1j*2.^(-(0:23)))) Kvalues = [ ... 0.70710678118655 0.63245553203368 0.61357199107790 0.60883391251775 ... 0.60764825625617 0.60735177014130 0.60727764409353 0.60725911229889 ... 0.60725447933256 0.60725332108988 0.60725303152913 0.60725295913894 ... 0.60725294104140 0.60725293651701 0.60725293538591 0.60725293510314 ... 0.60725293503245 0.60725293501477 0.60725293501035 0.60725293500925 ... 0.60725293500897 0.60725293500890 0.60725293500889 0.60725293500888 ];
然而,我不是很熟悉这个符号,我很难理解它,并产生一个简单的公式,可以产生同样的结果.我不想只是将这些值粘贴到我的CORDIC实现中,因为我希望自己以适当的精确度生成它们.
以下是我根据我的理解得出的结论,但这并不能产生正确的结果:
float prev = 1;
for (int i = 0; i < PRECISION; i++)
printf("%f\n", prev = prev/sqrt(1+pow(2, -i)));
我期待的价值观和我在维基百科的榜单上看到的一样:
0.707106
0.632455
0.613571
0.608833
0.607648
0.607351
但在我的公式中,它们收敛到0.457942...
,而不是0.607252...
:
0.707107
0.577350
0.516398
0.486864
0.472328
0.465116
要为CORDIC生成PRECISION
'Kvalues',C中的正确公式是什么?