gpt4 book ai didi

c++ - CORDIC 用于平方根

转载 作者:搜寻专家 更新时间:2023-10-31 01:07:56 26 4
gpt4 key购买 nike

我一直在研究双曲线旋转模式下的 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 等实例中执行循环两次......我已经更新了我的代码以对此进行补偿,但它仍然不起作用。我在 vector 模式下使用双曲线旋转,变量 d 应该基于 y 的符号

编辑*事实证明,在计算较大的平方根值时,CORDIC 可能会失败,因此您必须将您尝试求平方根的数字归一化到 0.5 到 2 的范围内,然后按比例缩小答案。

最佳答案

initial values should be set to a+1,a-1,0 for x0,y0,and z0 respectively. Others says it should be a+0.25,a-0.25,0. I am very confused by this

最终的结果是sqrt((a+1)^2 - (a-1)^2) 或者sqrt((a+0.25)^2 - (a-0.25 )^2)。无论哪种方式,a^2 项取消,常数项取消。唯一的区别是第一个版本返回 sqrt(4a)2sqrt(a) 而第二个版本直接返回 sqrt(a)。我不知道为什么一种情况或另一种情况可能是首选的数字原因。

编辑:您的错误是根据 y 设置 d,它应该基于 z

关于c++ - CORDIC 用于平方根,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18646105/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com