zoukankan      html  css  js  c++  java
  • 求平方根的倒数速算法--向卡马克等人致敬

    昨日,风雨交加,气温骤降,所有人都蜷缩在不暖和的厚衣服里,无神的盯着显示器。我也不例外,颤抖的手点击着鼠标,一边埋怨这天气,一边埋怨这电脑。突然,一段代码映入眼帘,定睛一看,没看懂,代码是这样的:

    float Q_rsqrt( float number )
    {
        long i;
        float x2, y;
        const float threehalfs = 1.5F;
     
        x2 = number * 0.5F;
        y  = number;
        i  = * ( long * ) &y;    // 这TM是啥
        i  = 0x5f3759df - ( i >> 1 );  // 这TM又是啥
        y  = * ( float * ) &i; // 这TM到底是啥
        y  = y * ( threehalfs - ( x2 * y * y ) );   // 这.......
    //      y  = y * ( threehalfs - ( x2 * y * y ) );   // .........
     
        return y;
    }

    这段代码出自《雷神之锤3》,求平方根的倒数,速度号称比通常 求根号,取倒数的计算方法快四倍,我瞬即一愣,不知哪来的热气,包裹着我的身体,驱赶着寒冷,除却了颤抖,凝结在心中的只有一个念头:这TM到底是啥。

    好吧,其实在以下只有一句是关键:

     i  = 0x5f3759df - ( i >> 1 );  // 这TM又是啥

    下文将重点分析上面那一句,但是文章嘛,要有开头结尾,好,当我前面都没说,咱们从头再来:

  • 相关阅读:
    WCF使用net.tcp寄宿到IIS中
    (转)Dubbo 简单Dome搭建
    Linux压缩解压
    Linux关闭开启防火墙命令
    简单登录(jsp+servlet)
    UVa 10285 Longest Run on a Snowboard [DP]
    UVa 1218 Perfect Service [DFS+DP]
    第三届ACM山东省赛 Pick apples [贪心+动规]
    ZOJ 3326
    HDU 1029
  • 原文地址:https://www.cnblogs.com/tntboom/p/4096036.html
Copyright © 2011-2022 走看看