13 | 魔数0x5f3759df
陈皓
该思维导图由 AI 生成,仅供参考
你好,我是陈皓,网名左耳朵耗子。
下列代码是在《雷神之锤 III 竞技场》源代码中的一个函数(已经剥离了 C 语言预处理器的指令)。其实,最早在 2002 年(或 2003 年)时,这段平方根倒数速算法的代码就已经出现在 Usenet 与其他论坛上了,并且也在程序员圈子里引起了热烈的讨论。
我先把这段代码贴出来,具体如下:
这段代码初读起来,我是完全不知所云,尤其是那个魔数 0x5f3759df,根本不知道它是什么意思,所以,注释里也是 What the fuck。今天这节课,我主要就是想带你来了解一下这个函数中的代码究竟是怎样出来的。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
这篇文章深入探讨了一个名为0x5f3759df的魔数在计算平方根倒数的算法中的应用。通过解释算法的代码和计算机浮点数的表示方法,文章深入探讨了浮点数的精度问题,并简化了浮点数的公式以便更好地理解其内部运作。通过对具体小数的二进制编码和验证,读者可以更直观地理解浮点数的表示和精度问题。文章还介绍了代码分析和相关历史,包括该算法的起源和魔数的优化过程。这篇文章提供了深入的技术细节和实例分析,对于对计算机科学感兴趣的读者来说,是一篇值得深入阅读的技术文章。文章内容涉及数学推导、代码分析和历史探讨,展现了作者对技术细节的深入理解和探索精神。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《左耳听风》,新⼈⾸单¥98
《左耳听风》,新⼈⾸单¥98
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(73)
- 最新
- 精选
- 路西法耗子为啥这么牛逼
作者回复: 不牛不牛
2018-03-2827 - 有咸鱼的梦想没有理解为什么浮点数3.14那里,小数部分需要进行这个处理(3.14-2)/(4-2)=0.57,希望皓叔能讲解一下
作者回复: 文中已讲了,你再仔细看看🙂
2018-05-1457 - imuyang脑子太笨了,愣是看了两遍才弄清楚
作者回复: 那很不错了
2018-05-086 - OutOfMemory1024曾经在知乎的一个100行内有哪些给力代码回答中引用了这段程序,但是远没有今天看完这篇文章理解更深刻,谢谢皓哥2017-11-1592
- Eben看了两遍,终于看懂了,就是利用那个魔数先求一个近似值,然后利用牛顿求根法再去逼近真实值2019-07-0226
- coderliang非常好。当初读 CSAPP 那本书时,读到第二章浮点数部分着实花了好久没没完全get到书中的逻辑……2017-11-16118
- Smallfly不知道耗子叔还看不看留言,关于浮点数的公式,我有一个疑问,其中 M/2^23 的部分是一个浮点数,我们在定义浮点数公式的时候,用了浮点数,这个公式都还没定义,这个浮点数是怎么表示的呢,会不会有一种鸡生蛋,蛋生鸡问题……2019-07-02210
- 飘过雪域的风看了《深入理解计算机原理》里面对浮点数二进制表示的描述,感觉不是很理解,看这里的解释秒懂啊2018-08-298
- 王彤此算法首先接收一个32位带符浮点数,然后将之作为一个32位整数看待,以将其向右进行一次逻辑移位的方式将之取半,并用十六进制“魔术数字”0x5f3759df减之,如此即可得对输入的浮点数的平方根倒数的首次近似值;而后重新将其作为浮点数,以牛顿法反复迭代,以求出更精确的近似值,直至求出符合精确度要求的近似值。在计算浮点数的平方根倒数的同一精度的近似值时,此算法比直接使用浮点数除法要快四倍。 from 百科2020-01-095
- 胡红伟由x求得x的整形i(x),再由i(y)=R-0.5i(x)求得y的整形i(y),再由i(y)反求y,再把y代入y(1.5-0.5xy²)表达式求得更精确的y。2019-05-2715
收起评论