智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 2187|回复: 5
打印 上一主题 下一主题

迭代法求平方根

[复制链接]

21

主题

896

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
4068
威望
2252
贡献
1296
兑换币
1483
注册时间
2012-7-30
在线时间
260 小时
毕业学校
克莱德大学
跳转到指定楼层
1#
发表于 2014-3-5 03:30:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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
干脆附带源代码吧:
  1. float InvSqrt(float x)
  2. {
  3.         float xhalf = 0.5f*x;
  4.         int i = *(int*)&x; // get bits for floating value
  5.         i = 0x5f3759df - (i>>1); // gives initial guess y0
  6.         x = *(float*)&i; // convert bits back to float
  7.         x = x*(1.5f-xhalf*x*x); // Newton step, repeating increases accuracy
  8.         return x;
  9. }
复制代码
迭代初始值(魔幻数)0x5f3759df 可以看论文:
http://www.matrix67.com/data/InvSqrt.pdf

回复

使用道具 举报

21

主题

896

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
4068
威望
2252
贡献
1296
兑换币
1483
注册时间
2012-7-30
在线时间
260 小时
毕业学校
克莱德大学
2#
 楼主| 发表于 2014-3-5 03:48:30 | 只看该作者
用 quake III 的话,要小心咯!涉及到浮点数据的存储方式。
还是推荐用简单的形式吧。
简单形式迭代了5次就已经非常精确了,
quake III 更牛逼,每迭代一次提高两位有效数字。
回复 支持 反对

使用道具 举报

25

主题

1217

帖子

0

精华

知名人物

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

积分
27554

论坛元老奖章活跃会员奖章优秀会员奖章在线王奖章资源大师奖章

QQ
威望
18751
贡献
5861
兑换币
3255
注册时间
2012-6-6
在线时间
1471 小时
3#
发表于 2014-3-5 08:33:50 | 只看该作者
              1
回复 支持 反对

使用道具 举报

32

主题

3009

帖子

0

精华

杰出人士

学期班的来卖萌?

Rank: 12Rank: 12Rank: 12

积分
14832

在线王奖章活跃会员奖章优秀会员奖章论坛元老奖章资源大师奖章

威望
5952
贡献
3172
兑换币
4257
注册时间
2013-11-26
在线时间
2854 小时
4#
发表于 2014-3-5 12:27:20 | 只看该作者
看看,学习一下
回复 支持 反对

使用道具 举报

1

主题

175

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2182
QQ
威望
1115
贡献
681
兑换币
691
注册时间
2012-12-5
在线时间
193 小时
5#
发表于 2014-3-5 12:50:35 | 只看该作者
get
回复 支持 反对

使用道具 举报

162

主题

2048

帖子

5

精华

超级版主

岳麓山没有车神

Rank: 10Rank: 10Rank: 10

积分
14920

论坛元老奖章优秀会员奖章活跃会员奖章论坛骨干奖章在线王奖章优秀版主奖章资源大师奖章

QQ
威望
6285
贡献
5963
兑换币
2581
注册时间
2013-11-14
在线时间
1336 小时
6#
发表于 2014-8-16 21:16:14 | 只看该作者
MARK
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-12-28 10:34 , Processed in 0.064730 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表