智能车制作
标题:
迭代法求平方根
[打印本页]
作者:
rubick
时间:
2014-3-5 03:30
标题:
迭代法求平方根
本帖最后由 rubick 于 2014-3-5 03:43 编辑
用迭代,按下面这个公式进行迭代即可求出a的平方根:
Xn=(Xn-1+a/Xn-1)/2 (n>0)
其中X0可以随便取一个数。当Xn-Xn-1满足精度要求时,即可输出Xn作为答案。原文:一种有趣地理解:
http://www.physixfan.com/archives/76
回复中有任意次方根的方法公式。
标准的牛顿迭代法:
http://www.matrix67.com/blog/archives/361
目前已知的最快的方法:quake III 源代码
http://www.matrix67.com/blog/archives/362
干脆附带源代码吧:
float InvSqrt(float x)
{
float xhalf = 0.5f*x;
int i = *(int*)&x; // get bits for floating value
i = 0x5f3759df - (i>>1); // gives initial guess y0
x = *(float*)&i; // convert bits back to float
x = x*(1.5f-xhalf*x*x); // Newton step, repeating increases accuracy
return x;
}
复制代码
迭代初始值(魔幻数)0x5f3759df 可以看论文:
http://www.matrix67.com/data/InvSqrt.pdf
作者:
rubick
时间:
2014-3-5 03:48
用 quake III 的话,要小心咯!涉及到浮点数据的存储方式。
还是推荐用简单的形式吧。
简单形式迭代了5次就已经非常精确了,
quake III 更牛逼,每迭代一次提高两位有效数字。
作者:
简单丹
时间:
2014-3-5 08:33
1
作者:
zhou1994
时间:
2014-3-5 12:27
看看,学习一下
作者:
银影のK.I.D
时间:
2014-3-5 12:50
get
作者:
Quixote
时间:
2014-8-16 21:16
MARK
欢迎光临 智能车制作 (http://dns.znczz.com/)
Powered by Discuz! X3.2