docs: public static double pow(double a, double b)
      {
  
          /*
           * Wright out a^b as 2^(b log2(a)) and then replace a with 'm 2^e' to get
           * 2^(b * log2(m*2^e)) which simplifies to 
           * m^b 2^(b e) when m, e, and b are positive. 
           * 
           * m & e are by IEEE defintion positive 
           */
  
          if (b < 0)
              return 1 / pow(a, -b);//b is now made positive
  
          long rawBits_a = doubleToLongBits(a);
          long mantissa_a = getMantissa(rawBits_a);
          final int e_a = Math.getExponent(a);
  
          //compute m^b and exploit the fact that we know there is no need for the exponent
          double m = longBitsToDouble(1023L << 52 | mantissa_a);//m in [1, 2]
          
          final double log2m = 1.790711564253215 + 0.248597253161674 * m - 3.495545043418375 / (0.714309275671154 + 1.000000000000000 * m);
  
          //we end up with 2^(b * log_2(m)) * 2^(b * e), which we can reduce to a single pow2 call
          return pow2(b * log2m + b * e_a);//fun fact, double*int is faster than casting an int to a double...
      }