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))); } }