你知道哪一行 C++ 代码价值数百万美元吗?
就是这一行神奇的 C++ 代码:i = 0x5f3759df – (i >> 1);
这行代码最早出现在 Quake 的代码库中,用于优化平方根倒数的计算。
float Q_rsqrt(float number)
{
long i;
float x2, y;
const float threehalfs = 1.5F;
x2 = number * 0.5F;
y = number;
i = * ( long * ) &y; // evil floating point bit level hacking
i = 0x5f3759df - ( i >> 1 ); // what the fuck?
y = * ( float * ) &i;
y = y * ( threehalfs - ( x2 * y * y ) ); // 1st iteration
// y = y * ( threehalfs - ( x2 * y * y ) ); // 2nd iteration, this can be removed
return y;
}
为什么优化平方根倒数如此重要?
平方根倒数广泛应用于视频游戏图形,尤其是 3D 游戏引擎。游戏编程的各个方面,如寻路、光照和反射,都依赖它。
在 Quake III Arena 这样快节奏、视觉沉浸感强的游戏中,这些计算每秒要执行数百万次。因此,即使性能上微小的提升也意义重大。

没有这个巧妙的优化,Quake 或许就不会成为游戏行业的标杆。
这个创新解决方案背后的天才是谁?
AMD RTG 欧洲游戏工程团队高级经理 Rys Sommerfeldt 在 2004 年对该函数的起源展开了调查。最终看来,作者是 Greg Walsh。Greg Walsh 是计算机界的一座丰碑,他曾参与研制最早的 3D 图形硬件。
这行代码晦涩、巧妙,还带有软件史上最著名的注释之一。但在 AI 时代,它引出了一个越来越相关的问题:
AI 能写出这样的代码吗?应该让它写吗?如果不能,为什么?
简短回答:不完全是。但……某种程度上可以。
AI 代码生成工具——如 GitHub Copilot、ChatGPT 或 Google Gemini——在获得足够上下文提示后,绝对可以复现这行代码。
但关键词是复现,而不是发明。
为什么不行?让我们来拆解一下。
1.这行代码不是“被发现”的——而是被“打造”出来的
常量0x5f3759df是一个魔法数字,来自对浮点格式(IEEE 754)的反复试错和深刻理解。它需要对以下方面的洞察:
- 浮点数的位级表示
- 二进制近似技术
- 游戏引擎中的性能瓶颈
AI并不需要像人类那样“理解”这些东西——而如果训练数据中没有展示这个确切的技巧,它不太可能从零合成出来。
2.AI 擅长模式综合,而非发明
LLM(大型语言模型)从人类编写的代码中学习。它们能跨示例泛化,但在数学意义上并不具备天生的创造力。它们:
- 组合已知概念
- 优化已知结构
- 预测最可能的下一个 token
除非训练集中包含类似这行代码的东西,否则它不太可能在新场景中自然地浮现。
3.这行代码在现代编码中是一种反模式
从软件工程角度看,这行代码:
- 不可移植
- 不安全(由于类型双关)
- 难以阅读和维护
现代 AI 工具(尤其是那些对齐“安全”或“干净”代码理念的工具)不太可能输出它,除非明确要求“快速平方根倒数 hack”。
AI 什么情况下能复现它
如果你问 ChatGPT 类似这样的问题:
“用 C 写出 Quake III 中的快速平方根倒数函数”
你很可能会得到它。
float Q_rsqrt(float number) {
long i;
float x2, y;
const float threehalfs = 1.5F;
x2 = number * 0.5F;
y = number;
i = * ( long * ) &y;
i = 0x5f3759df - ( i >> 1 );
y = * ( float * ) &i;
y = y * ( threehalfs - ( x2 * y * y ) );
return y;
}
在 GitHub 和 StackOverflow 代码上训练的 AI 工具见过它,只要你问,它们很乐意分享。
但它们不会自己发明这种优化,1.0f / sqrt(x)除非训练集中包含这个 hack,或者你给出非常具体的提示。
这告诉我们人类与 AI 创造力的差异
这行代码——以及随后那句绝妙的注释——提醒我们人类开发者带来的东西:
- 洞察力:知道成本在哪里,以及什么技巧可能解决它
- 冒险精神:因为有效而做一些“邪恶”的事
- 探索精神:找到真正能解决问题的魔法数字
今天的 AI 可以辅助、翻译和优化——但像这样的代码行来自好奇心和直觉,这是我们仍在努力教给机器的东西。
最后的思考
那么:AI 能从零写出这样的代码吗i = 0x5f3759df - (i >> 1);?
还不能。
在 AI 能够真正探索浮点内部机制、性能 hack 和不安全的内存操作——从第一性原理出发——之前,写出这种代码行的仍将是人类。
