雷神之锤里求方根倒数的算法原理是什么?

bfoxgqy 2010-10-16 07:06:59
rt,雷神之锤中相关代码是:
float InvSqrt (float x)
{
float xhalf = 0.5f*x;
int i = *(int*)&x;
i = 0x5f3759df - (i >> 1); // 我只知道5f是什么意思,后面的呢?
x = *(float*)&i;
x = x*(1.5f - xhalf*x*x); // 这是普通的迭代
return x;
}
求问0x5f3759df是怎么得到的,我网上搜了下好像没有结论。
还有要是对double的数进行运算,这个常数该是什么呢?
...全文
283 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
a13555551265 2010-10-17
  • 打赏
  • 举报
回复
...很深。。。 学习了
bfoxgqy 2010-10-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 mymtom 的回复:]
约翰-卡马克的密码?
http://bbs.gameres.com/showthread.asp?threadid=46513
http://zhfkt.blogbus.com/logs/69104383.html
http://duanple.blog.163.com/blog/static/70971767200981810451290/
http://en.wikipedia.org……
[/Quote]
可是里面都没提到具体算法啊。。
其中Lomont的论文也只是算出了接近的值,再用暴力法算出最佳值。
不过wiki里有一段话说Lomont指出的64位数据使用的最佳常数0x5fe6ec85e7de30da是错误的,应该接近0x5FE6EB50C7AA19F9,这是怎么算的呢?

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧