Fast sqrt in Java at the expense of accuracy

后端 未结 3 378
温柔的废话
温柔的废话 2020-12-15 11:23

I am looking for a fast square root implementation in Java for double values in the input range of [0, 2*10^12]. For any value in this range, the precision should be upto 5

3条回答
  •  离开以前
    2020-12-15 12:02

    Once you give the code time to warm up. Math.sqrt() can be pretty fast

    static double[] values = new double[500 * 1000];
    
    public static void main(String... args) {
        for (int i = 0; i < values.length; i++) values[i] = i;
    
        for (int j = 0; j < 5; j++) {
            long start = System.nanoTime();
    
            for (int i = 1; i < values.length; i++) {
                values[i] = Math.sqrt(values[i]);
            }
            long time = System.nanoTime() - start;
    
            System.out.printf("Took %d ns to Math.sqrt on average%n", time / values.length);
        }
    }
    

    prints

    Took 20 ns to Math.sqrt on average
    Took 22 ns to Math.sqrt on average
    Took 9 ns to Math.sqrt on average
    Took 9 ns to Math.sqrt on average
    Took 9 ns to Math.sqrt on average
    

提交回复
热议问题