源码技术
php
java
python
Linux
行业商讯
当前位置:
首页
>
java
>有哪些令人拍案叫绝的代码/优化?
有哪些令人拍案叫绝的代码/优化?
2026-10-21 13:27:39
有哪些令人拍案叫绝的代码/优化?
那不得不提这一串数字。
0x5f3759df。
反正我第一次看到这个故事的时候,确实是被惊呆了,这也太妙了。
《雷神之锤3》是一个经典的 FPS 游戏,这个游戏画面十分精美,而且优化得特别好,在配置很差的电脑上也能够流畅运行。
我们都知道,其实 3D 引擎的核心还是数学运算。
光照在物体表面怎么反射,取决于物体表面的角度,为了计算这个角度,计算机需要频繁地对一个向量进行归一化处理。
这里面必须要做的一步运算,就是求平方根倒数。
你可能觉得这有什么难的,调用系统函数算呗,(float)(1.0/sqrt(x))就行了。
后来雷神之锤 3 的源码开放了。
人们发现了这个函数。它长得非常诡异,甚至带着一种邪气。
代码里先是把输入的浮点数强行变成长整型,然后出现了一行让全世界程序员盯着看了十分钟都没看懂的语句。
这行代码里有一个十六进制的数字:0x5f3759df。
旁边还有一句注释,What the fuck,这特么是啥?
就是我标红的那一句,就算我不标红,你也能一眼看到后面那个。
然而,就是这段代码,它的效率比系统函数要快上 4 倍。
大概解释一下。
那我们要搞清楚计算机是怎么存储数字的。存储整数很简单,直接转成二进制就行了;
如果是存储小数,使用的是一种叫做
IEEE 754
的标准,有点像科学记数法,一部分存储指数,另一部分存储有效数字。
然后写这段代码的大神发现:
浮点数的二进制位模式和它的对数之间存在一种奇妙的线性关系。
简单来说,如果你把一个浮点数的二进制码直接当成整数来看,它竟然近似于这个浮点数对数的一半。
所以他直接把代表浮点数的内存数据提取出来,当成整数处理,利用位运算向右移一位,在二进制中,右移一位就是除以 2。
回到数学上,求平方根的倒数,其实就是求这个数的 -1/2 次方,取对数后就变成了乘以 -0.5。
所以用一步右移的操作,在数学层面完成了除以二的计算,就避开了比较费劲的浮点运算。
但是移位之后数据会发生偏移,需要把它拽回来。这个拽回来的锚点就是0x5f3759df。
经过这一步整数减法和移位,计算机其实是猜出了一个结果。
你没听错,是猜。
这个结果肯定是不精确的,大概只有几位的精度,接下来,代码用了一次
牛顿迭代法
,你可以理解为这个猜出来的数字很粗糙,但是经过了一步打磨,它的精度就变得很高了。
后来一个数学家(普渡大学的数学家Chris Lomont)对这个数字也很感兴趣,用理论上推导出了一个更完美的常数0x5f37642f,跟我们上文提到的0x5f3759df 十分接近。
然后,数学家用它推导出的数,跟我们上文提到的这个数做效率测试,没有人家雷神之锤 3 里边的那个数快,
这位数学家并不甘心,后来又使用类似于穷举的方法,找到了一个更优秀的数0x5f375a86。兴高采烈的写了一篇论文,平方根倒数速算法。
对了,至今没人知道这个数是怎么来的,也不知道是谁写的。
所以才会有那么一句 what the fuck 的注释。
本文来自网友投稿或网络内容,如有侵犯您的权益请联系我们删除,联系邮箱:596563534@qq.com 。
Python|SAM2安装与图像分割
Linux内核构建过程简析
最新文章
Python|SAM2安装与图像分割
用Python实现复杂人物图片识别
UG编程-四轴异形面联动光刀
会懂你R10代码报错移除解决方法
任天堂官网暗藏新代码 Switch2疑似存在"小尺寸"版本!《勇者斗恶龙7:重制版》新情报 职业系统以及强力怪物等!
AI写代码秒速完成,为什么真正的软件工程师反而更值钱了?
初识Python的Pyxel 库,提高学习兴趣的一个方式
学编程请疯狂用这个app(好用爱用)
SDD 赋能 AI 编程:OpenSpec 让需求驱动告别 AI “自由发挥”
【代码分享】考虑电池储能寿命损耗和电价型需求响应的微电网经济调度
热门文章
多个Linux正拥抱KDE Plasma
从零开始学python-标识符
Python 基因序列增量下载脚本:高效易用,告别重复与统计误差
Linux AWK 高级用法深度解析
告别“也就是能跑”的代码:如何逼着AI写出高质量工程?
图像识别 | 使用Python对医学Dicom文件的预处理(含代码)
寒假学习计划出炉:英语+Python编程,为新学期蓄力前行
嵌入式开发与Linux操作系统
F-35又翻车!7700代码发出后人间消失,日本懵了!
【S16赛季】全代码!自行检索!
随机文章
10个月宝宝每天需要喝多少奶粉?
未来已来,孩子需要掌握的不是编程,而是“新母语”
2024年6月GESP7级难度编程题解,能源站功率检测计划
Python必备108个高频词汇
Linux中几个获取硬件详细信息的命令
带娃学python之第八篇:列表与字典
少儿编程考级 | 青少年信息技术等级考试(蓝桥等考)C++算法编程模拟题(二级) 来啦!
Python从入门到精通day09
Java 故事
【Linux-02】从内核视角理解 Linux 进程管理:机制、实现方式与工程实践
AI 编程太强大了:成功制作了第一个exe软件