当前位置: 首页 > news >正文

快速平方根取倒数算法

很久以前就想写一下这个快速平方根取倒数算法了,这个好像还很有历史“渊源”来着,据说给当时“雷神之锤”的开发带来了巨大优化。

首先我们思考一下,平方根应该用哪种算法求,显然这是一个只能逼近的值,因此我们想到了“牛顿迭代”算法:

\[x_n=x_{n-1}-\frac{f(x_{n-1})}{f'(x_{n-1})} \]

考虑函数 \(f(x)=\frac{1}{x^2}-a\) ,先选定一个初始值 \(x_0\) 然后:

\[\begin{aligned}x_n&=x_{n-1}-\frac{ax_{n-1}^3-x_{n-1}}{2}\\ &=\frac{3x_{n-1}-ax_{n-1}^3}{2}\end{aligned} \]

迭代求解。

显然复杂度是与求解的精度相关的,迭代次数和答案的精度正相关。那么,能否选定某个恰当的 \(x_0\),使得迭代次数得到大幅的减少呢?答案是肯定的。

早期游戏工程师为了简化复杂度(众所周知早期算法工程师常从底层最大限度的优化算法,极致压榨 \(PC\) 机效率),从浮点数的性质入手:

\(32\) 位浮点数的 IEEE754 存储形式是这样的:

  • \(S\) 是符号位,在开平方根是不必理会,因为计算机系统运算是基于实数的,在实数中对负数开平方是没有意义的
  • \(E\) 表示阶码,但是有 \(127\) 的平移用来表示正负,故 \(E−127\) 是阶码表示的实际值
  • \(M\) 表示尾码,表示原二进制浮点数第一个 \(1\) 之后的所有数位,基本可以认为隐藏了一位 \(1\) ,实际值为 \(1.xxxxxxx\)

那么类似于十进制的科学计数法,我们可以将浮点数表示为:

\[y=(1+ \frac{M}{2^{23}})⋅2^{E−127} \]

对于浮点数 \(x=\frac{1}{\sqrt{a}}\),我们不妨取对数;

\[\begin{aligned} -\frac{1}{2}\log_2a&=-\frac{1}{2}[\log_2(1+\frac{M_a}{2^{23}})+E_a-127]\end{aligned} \]

我们观察到 \(\frac{M_a}{2^{23}}\in(0,1)\),故 \(\log_a(1+x)\) 可近似为 \(x+\epsilon\)\(\epsilon\) 为修正值),即:

\[\begin{aligned}\log_2\frac{1}{\sqrt{a}}&=-\frac{1}{2}(\frac{M_a}{2^{23}}+E_a+\epsilon-127)\\\log_2\frac{1}{\sqrt{a}}&=-\frac{1}{2}(\frac{M_a+2^{23}E_a}{2^{23}}+\epsilon-127)\\ \end{aligned} \]

观察这个部分 \(M_a+2^{23}E_a\),非常巧妙地,跟据浮点数的存储规则,我们发现这个部分就是浮点数 \(a\) 强制转换为整数型后的表示,我们把这个部分称为 \(X_a\)。接下来,我们将 \(x\)\(a\) 分别表示并联立:

\[\left\{ \begin{aligned}\log_2\frac{1}{\sqrt{a}}&=-\frac{1}{2}(\frac{X_a}{2^{23}}+\epsilon-127)\\ \log_2x&=\frac{X_x}{2^{23}}+\epsilon-127 \end{aligned} \right. \]

化简得;

\[\begin{aligned}\frac{X_x}{2^{23}}+\epsilon-127&=-\frac{1}{2}(\frac{X_a}{2^{23}}+\epsilon-127)\\X_x&=(381+\epsilon)2^{23}-\frac{1}{2}X_a \end{aligned} \]

接下来,为了使修正值更加正确,我们不妨提出一种启发式的求解方法:使 \(\log2(1+x)\)\(x+\epsilon\) 在区间 \([0,1]\) 上平均差值为 \(0\),即:

\[\begin{aligned}\int_0^1\log_2(1+x)dx-(x+\epsilon)dx&=0\\ \int_0^1\log_2(1+x)dx-\int_0^1(x+\epsilon)dx&=0\\ \int_0^1\log_2(1+x)dx&=\int_0^1(x+\epsilon)dx\\ \frac{1}{\ln2}\int_1^2\ln{u}du&=\frac{1}{2}+\epsilon\\ \frac{1}{\ln2}(2ln{2}-1)&=\frac{1}{2}+\epsilon\\ 2-\frac{1}{ln{2}}&=\frac{1}{2}+\epsilon\\ \epsilon&=\frac{3}{2}-\frac{1}{\ln2}\\\end{aligned} \]

最后将\(2^{22}\times(381-\epsilon)\) 十六进制硬编码为 0x5f3c551d,而 0x5f3759df 这个经典算法中的”魔数“怎么来的希腊奶(事实上确实是经典算法中的“魔数”能带来更加精确的答案。我猜是暴力二分试出来的,毕竟是程序员又不是数学家,费这劲干啥)。

综上,我们就完整的得到了精度非常高的初始值 \(x_0\),接着将这种初始值代入牛顿法仅需 \(1\) 次迭代就能达到相当高的精度,大大降低了复杂度。

上个原版代码;

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 hackingi  = 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 removedreturn y;
}
http://www.hskmm.com/?act=detail&tid=38850

相关文章:

  • MinIO 介绍(4)--Java 操作 MinIO
  • 团队管理
  • DHCP 泛洪攻击小实验
  • 2025年家装电缆工厂权威推荐榜单:光伏电缆/阻燃电缆/电线电缆源头厂家精选
  • 2025年道路裂缝密封胶生产厂家权威推荐榜单:道路专用密封胶/混凝土路面灌缝胶/聚氨酯灌缝胶源头厂家精选
  • 2025 年模板加固源头厂家最新推荐榜:优质企业权威测评出炉,含高精 / 剪力墙等多类型模板加固品牌
  • 102302155张怡旋数据采集第一次作业
  • 2025年人字纹机织布源头厂家权威推荐榜单:700g机织布/锦纶工业用布/800g机织布源头厂家精选
  • 2025年永磁同步变频器加工厂权威推荐榜单:高压变频柜装置/通用矢量变频器/高压变频器源头厂家精选
  • Day4无序,有序和定义列表
  • 刷题日记—数组练习-幻方
  • IT运维工程师的起源与发展
  • JBoltAI:解锁Java团队的AI开发潜能,引领产业数智化升级新浪潮
  • SpringMVC 启动与请求处理流程解析 - Higurashi
  • Java 企业 AI 转型选什么?JBoltAI 框架:20 + 大模型 + 向量数据库,AI 应用超灵活
  • 20232401 2025-2026-1 《网络与系统攻防技术》实验三实验报告
  • JBoltAI:企业级 Java AI 应用开发框架
  • 告别 AI 开发 “瞎折腾”!JBoltAI 框架帮 Java 团队提速,AI 应用落地快人一步
  • 软件技术基础第二次作业
  • Log4Net配置文件参考
  • 2025年8座旅游观光车供应商权威推荐榜单:11座旅游观光车/景区观光车/燃油观光车源头厂家精选
  • 2025 年健身器材品牌最新推荐排行榜:权威测评揭晓家用商用高口碑品牌及选购指南商用 / 单位 / 家庭 / 有氧 / 力量健身器材推荐
  • 2025 年最新推荐!工业 / 防爆 / 低温 / 水冷 / 螺杆 / 超低温等多类型冷水机定制厂家榜单,助力企业精准选择高效制冷品牌
  • 2025年红木家具厂家权威推荐榜:交趾黄檀/小叶紫檀/巴里黄檀/缅甸花梨/阔叶黄檀,明清古典榫卯工艺高端定制全屋整装,白胚烘干源头工厂精选
  • 2025年实木家具厂家权威推荐榜:原木/全实木/北美黑胡桃/樱桃木/榫卯工艺高端定制,实木全屋整装,烘干/白胚/木蜡油保养,经典款品质之选
  • 2025年服装厂家推荐排行榜,棒球帽,卫衣,羽绒服,春秋季运动休闲服饰厂家精选
  • 2025年铁氟龙高温线厂家权威推荐榜:极细铁氟龙/UL10064铁氟龙/UL1332铁氟龙/UL1867铁氟龙/UL10064极细铁氟龙/UL1332极细铁氟龙/UL1867极细铁氟龙专业解析
  • 2025年卫衣品牌权威推荐榜:精选纯棉/加绒/oversize/情侣款卫衣源头厂家,潮流与舒适兼备的穿搭首选
  • 详细介绍:2025 年 AI+BI 趋势下,Wyn 商业智能软件如何重构企业决策效率?
  • 2025年小型收卷机生产商权威推荐榜单:收卷机械设备/多功能收卷机/收卷机械源头厂家精选