zoukankan      html  css  js  c++  java
  • 开平方与魔数0x5F3759DF:Quake III 开源代码

    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 hacking
      i = 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 removed
    
      #ifndef Q3_VM
      #ifdef __linux__
      assert( !isnan(y) ); // bk010122 - FPE?
      #endif
      #endif
      return y;
    }
    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
        return x;
    } 

    参考:

    http://www.matrix67.com/data/InvSqrt.pdf

    http://www.guokr.com/post/90718/

  • 相关阅读:
    第25周三
    第25周二
    第25周一
    第24周日
    第24周六
    第24周五
    第24周四经验感受想法
    第24周三
    第24周二
    01背包问题
  • 原文地址:https://www.cnblogs.com/georgethrax/p/4419133.html
Copyright © 2011-2022 走看看