美文网首页
平方根的高效求解

平方根的高效求解

作者: laxe | 来源:发表于2017-06-12 15:52 被阅读0次

这是一个牛顿法求解平方根的算法:

float InvSqrt(float x)
{
    float xhalf = 0.5f*x;
    int i = *(int*)&x; // get bits for floating VALUE
    i = 0x5f375a86-(i>>1); // gives initial guess y0
    x = *(float*)&i; // convert bits BACK to float
    x = x*(1.5f-xhalf*x*x); // Newton step, repeating increases accuracy
    x = x*(1.5f-xhalf*x*x);
    x = x*(1.5f-xhalf*x*x);
    return 1/x;
}

这个算法不是最精确的,但却相当高效,效率是库函数sqrt的4倍。
两次迭代就能达到小于0.01的误差,三次迭代能达到小于0.001的误差,迭代次数再多效果就不明显了。

鼎鼎大名的John Carmack将此算法用于Quake-III Arena的代码中,当时硬件条件有限,而求平方根倒数的运算在游戏里又十分频繁,这么高效的算法很有意义。

也不知道这位天才是怎么找到的初始化值,两次迭代就能达到相当高的精度。

参考《求平方根sqrt()函数的底层算法效率问题》

相关文章

  • 平方根的高效求解

    这是一个牛顿法求解平方根的算法: 这个算法不是最精确的,但却相当高效,效率是库函数sqrt的4倍。两次迭代就能达到...

  • 平方根考点汇总

    1、算术平方根和平方根的求解过程。 2、算术平方根的双重非负性应用(取值范围及综合应用)。 3、非负性(二次根式、...

  • leetCode: Sqrt(x)

    1. 题目: 求解平方根 Implement int sqrt(int x). Compute and retur...

  • 高维矩阵求特征根的精度问题

    如何求解矩阵的平方根? 矩阵分解后,将对角矩阵中对角元素进行平方,再复原 # 求负数的平方根: sqrt(as.c...

  • 牛顿法求解平方根

    学习go语言时,遇到一种解平方根的有趣方法,牛顿法。 找来一个比较直观的图片: 我们先在一个点处做切线,然后这条切...

  • NSArray 快速求和、平均值、最大值、最小值

    使用 oc 自带的方法 高效求解

  • 牛顿迭代法

    如何用牛顿迭代法求一个数的平方根(立方根)   对于  对于该方程的求解,可以用牛顿迭代法求近似解   设r是f(...

  • 求平方根或近似平方根

    问题:给定一个正整数,如果它有正整数平方根,则求出它的平方根;如果它没有正整数平方根,则求出最接近的正整数平方根。...

  • 算术平方根

    岳各庄一般老师是不会这么讲平方根与算术平方根的 图片 图片 心无旁骛,勇往直前 【前言】 平方根和算术平方根,这个...

  • 2018-12-26 牛顿法求解平方根

    用牛顿法求平方根

网友评论

      本文标题:平方根的高效求解

      本文链接:https://www.haomeiwen.com/subject/syblqxtx.html