在介绍卡马克常数的原理之前,我们需要先了解一下平方根计算的基本方法。 1.牛顿迭代法 牛顿迭代法是求解方程 f(x)=0 的一种方法,其基本思想是从一个初始值开始,通过不断迭代来逼近方程的根。对于求平方根而言,我们可以将其转化为求解方程 x^2-a=0,其中a为待求平方根。 具体来说,我们可以先假设一个初始值...
将1/2放到括号里面,就得到了上面那个函数的倒数第二行。 接着,我们要设法估计第一个*似根。这也是上面的函数最神奇的地方。它通过某种方法算出了一个与真根非常接*的*似根,因此它只需要使用一次迭代过程就获得了较满意的解。它是怎样做到的呢?所有的奥妙就在于这一行: i = 0x5f3759df - (i >> 1); ...
卡马克的平方根倒数算法的基本原理是通过利用一个称为Newton-Raphson迭代的方法来求解平方根倒数。Newton-Raphson迭代是一种数值分析技术,它可以用来求解一元多项式的根,并且可以用来求解非线性方程组。此外,它还可以用来求解更复杂的数学问题,例如求解方程组的多个根。 Newton-Raphson迭代的原理是,对于一个特定的方程,可以...
求平方根的倒数,实际就是求方程1/(x^2)-a=0的解。将该方程按牛顿迭代法的公式展开为: x[n+1]=1/2*x[n]*(3-a*x[n]*x[n])将1/2放到括号里面,就得到了上面那个函数的倒数第二行。 接着,我们要设法估计第一个近似根。这也是上面的函数最神奇的地方。它通过某种方法算出了一个与真根非常接近的...
但真正让卡马克封神的是“平方根倒数速算法”。在上世纪90年代,3D游戏还在起步阶段,渲染3D图形能力受到硬件的限制,因此程序员不得不想办法另辟蹊径。1999年,当卡马克在开发《雷神之锤III竞技场》时,需要计算照明和投影的波动角度与反射效果,不得不使用“浮点运算求平方根倒数”,但这样做的成本极高,因为在快...
平方根倒数马克浮点数算法phylips 卡马克的求平方根的倒数的程序(快速平方根倒数算法)2009-09-1810:45:01|分类:离奇的code|字号大中小订阅这个程序,大概在2006年看到的,当时进行了分析,主要分析了位运算那部分:如何利用浮点数的位表示法快速计算一个近似值。而对于整个迭代计算原理并没有仔细看,今天再重新分析一下...
NR最关键的地方在于估计第一个近似根。如果该近似根与真根足够靠近的话,那么只需要少数几次迭代,就可以得到满意的解。 现在回过头来看看如何利用牛顿法来解决我们的问题。求平方根的倒数,实际就是求方程1/(x^2)-a=0的解。将该方程按牛顿迭代法的公式展开为: ...
// y = y * ( threehalfs - ( x2 * y * y ) ); // 2nd iteration, this can be removed return y; } 给定32位浮点数 n ,目标输出 1/sqrt(n); 根据浮点数表示法: 可写为 ,其中M是后23位的内容(按照整数理解),E是前1-前9位的内容(按照整数理解), ...
卡马克的求平方根函数代码的陷阱 首先感谢xq; lj定位问题! 问题出在我签入的来自卡马克的求平方根函数代码。 Code 红色部分代码在gcc开启-fstrict-aliasing选项后将得到错误的代码。由于使用了type-punned pointer将打破strict-aliasing规则。 由于-fstrict-aliasing选项在-O2, -O3, -Os等优化模式下都将开启(目前dev...
但真正让卡马克封神的是“平方根倒数速算法”。 在上世纪90年代,3D游戏还在起步阶段,渲染3D图形能力受到硬件的限制,因此程序员不得不想办法另辟蹊径。 1999年,当卡马克在开发《雷神之锤III竞技场》时,需要计算照明和投影的波动角度与反射效果,不得不使用“浮点运算求平方根倒数”,但这样做的成本极高,因为在快节奏...