public class Test {

    private static final float SHIFT23 = 1 << 23;
    private static final float INV_SHIFT23 = 1.0f / SHIFT23;

    public static final float fastPow(float a, float b) {
      float x = Float.floatToRawIntBits(a);
      x *= INV_SHIFT23;
      x -= 127;
      float y = x - (x >= 0 ? (int) x : (int) x - 1);
      b *= x + (y - y * y) * 0.346607f;
      y = b - (b >= 0 ? (int) b : (int) b - 1);
      y = (y - y * y) * 0.33971f;
      return Float.intBitsToFloat((int) ((b + 127 - y) * SHIFT23));
    }
    
    public static long times(int timesCount, Runnable runnable) {
        long time = System.currentTimeMillis();
        for (int i = 0; i < timesCount; i++) {
            runnable.run();
        }
        return System.currentTimeMillis() - time;
    }
    
    public static void main(String[] args) {
        System.out.println(Test.times(100000000, () -> Test.fastPow(1.5f, 3.0f)));
        System.out.println(Test.times(100000000, () -> StrictMath.pow(1.5f, 3.0f)));
    }
}