brainfrz icon

Untitled

brainfrz | PRO | 10/04/15 12:04:43 AM UTC | 0 ⭐ | 788 👁️ | Never ⏰ | []
Java |

4.47 KB

|

None

|

0 👍

/

0 👎

public class BenchSimpRad
{
    public static final int TEST_VALUE = 1274912425; // This will simpilify to 205 root 30337
 
 
    static long[] simplify2( long square )
    {
        double outside = 1;
        double inside = square;
        long[] simplified = { 1, square };
 
        // Check if it's already a perfect square
        outside = Math.sqrt(square);
        if (outside == Math.floor(outside))
        {
            simplified[0] = (long)outside;
            simplified[1] = 1;
            return simplified;
        }
        
        // Find all the squares that could be factors and see if they are
        long i, sqr;
        for (i = 2, sqr = 4; sqr <= (square / 2); i++, sqr = (i * i))
        {
            // Is this square a factor?
            double in = (double)square / sqr;
            if (in == Math.floor(in))
            {
                simplified[0] = i;
                simplified[1] = (long)in;
            }
        }
        
        // Otherwise, since it hasn't simplified, return the original radical
        return simplified;
    }
 
    static long[] simplify4( long square )
    {
        long outside = 1;
        long inside = square;
        long[] simplified = { 1, square };
 
        // Check if it's already a perfect square
        outside = (long)Math.sqrt(square);
        if ((outside * outside) == square)
        {
            simplified[0] = outside;
            simplified[1] = 1;
            return simplified;
        }
 
        // Find all the squares that could be factors and see if they are
        for (long factor = 2, sqr = 4; sqr <= (square / 2); factor++, sqr = (factor * factor))
        {
            // Is this square a factor?
            if ((square % sqr) == 0)
            {
                simplified[0] = factor;
                simplified[1] = square / sqr;
            }
        }
 
        // Otherwise, since it hasn't simplified, return the original radical
        return simplified;
    }
 
 
    public static void benchmark2( int iterations )
    {
        long startTime = System.nanoTime();
        
        for (int i = 0; i < iterations; i++)
        {
            simplify2(TEST_VALUE);
        }
        
        long endTime = System.nanoTime();
        long avgTime = (endTime - startTime) / iterations;
        System.out.println("SimpRad2 took " + avgTime + "ns per iteration on average over "
                                + iterations + " iterations.");
    }
 
    public static void benchmark4( int iterations )
    {
        long startTime = System.nanoTime();
        
        for (int i = 0; i < iterations; i++)
        {
            simplify4(TEST_VALUE);
        }
        
        long endTime = System.nanoTime();
        long avgTime = (endTime - startTime) / iterations;
        System.out.println("SimpRad4 took " + avgTime + "ns per iteration on average over "
                                + iterations + " iterations.");
    }
 
    public static void benchmark2JIT( int iterations )
    {
        for (int i = 0; i < 500; i++)
        {
            simplify2(TEST_VALUE);
        }
 
        long startTime = System.nanoTime();
        
        for (int i = 0; i < iterations; i++)
        {
            simplify2(TEST_VALUE);
        }
        
        long endTime = System.nanoTime();
        long avgTime = (endTime - startTime) / iterations;
        System.out.println("SimpRad2 took " + avgTime + "ns per iteration on average over "
                                + iterations + " iterations.");
    }
 
    public static void benchmark4JIT( int iterations )
    {
        for (int i = 0; i < 500; i++)
        {
            simplify4(TEST_VALUE);
        }
 
        long startTime = System.nanoTime();
        
        for (int i = 0; i < iterations; i++)
        {
            simplify4(TEST_VALUE);
        }
        
        long endTime = System.nanoTime();
        long avgTime = (endTime - startTime) / iterations;
        System.out.println("SimpRad4 took " + avgTime + "ns per iteration on average over "
                                + iterations + " iterations.");
    }
 
 
 
    public static void main( String[] args )
    {
        // BENCHMARK SIMPRAD2
        // Run 500 iterations to benchmark without JIT
        benchmark2(50);
        benchmark4(50);
 
        // Run another 10000 iterations to benchmark with JIT
        benchmark2JIT(10000);
        benchmark4JIT(10000);
    }
}

Comments