我一直在查看双曲线旋转模式下的 CORDIC 算法以找到变量的平方根。我不确定我的初始变量应该是什么 (x0, y0, z0) 才能找到平方根。我已经阅读了一些论文,指出要找到 sqrt(a),对于 x0、y0 和 z0,初始值应分别设置为 a+1、a-1、0。其他人说应该是a+0.25,a-0.25,0。我对此感到非常困惑
任何人都可以帮忙吗?
double x = (64.0+1);
double y = (64.0-1);
double z = 0;
double k = 3;
double n = 1;
while(n <= 20 ){
double xn = pow(2.0,-1.0*n) * x;
double yn = pow(2.0,-1.0*n) * y;
if(y < 0){
x = x + xn;
y = y + yn;
z = z - atanh(pow(2.0,-1.0*n));
}
else
{
x = x - xn;
y = y - yn;
z = z + atanh(pow(2.0,-1*n));
}
if(k > 0){
k = k-1;
}
else{
k = 3;
if(y < 0){
x = x + xn;
y = y + yn;
z = z - atanh(pow(2.0,-1.0*n));
}
else
{
x = x - xn;
y = y - yn;
z = z + atanh(pow(2.0,-1.0*n));
}
}
n++;
cout << "x: " << x << " y: " << y << " z: " << z << endl;
}
编辑* 除了补偿 3j+1 次重复外,CORDIC 还需要在 n = 4、13、40 等实例中执行两次循环,...我已经更新了我的代码以弥补这一点,但它仍然不起作用。我在矢量模式下使用双曲线旋转,该变量d
应基于 y 的符号
编辑* 结果表明,在计算较大的平方根值时,CORDIC 可能会失败,因此您必须将尝试查找平方根的数字标准化为 0.5 到 2 范围,然后按比例缩小答案。