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又是啥

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

  • 相关阅读:
    flask之闪现
    对于Flask中蓝图的理解
    flask中的CBV和FBV
    Flask之基本使用与配置
    Flask
    Flask-信号(blinker)
    flask-migrate
    Flask WTForms的使用和源码分析 —— (7)
    mac下卸载jdk
    RabbitMQ五种消息队列学习(三)–Work模式
  • 原文地址:https://www.cnblogs.com/tntboom/p/4096036.html
Copyright © 2011-2022 走看看