/* * Integer Square Root function * Contributors include Arne Steinarson for the basic approximation idea, Dann * Corbit and Mathew Hendry for the first cut at the algorithm, Lawrence Kirby * for the rearrangement, improvments and range optimization, Paul Hsieh * for the round-then-adjust idea, and Tim Tyler, for the Java port. */ public class Test { public static void main(String args[]) { // perform timings... testSpeed(); // hang... do { } while (true); } static void testSpeed() { int i = 1; int i2 = 1; int i3 = 1; float f = 1; float f2 = 1; float f3 = 1; int j; int temp; long newtime; long oldtime; int N = 10000000; int mask = (1 << 16) - 1; // SquareRoot.fast_sqrt()... oldtime = System.currentTimeMillis(); for (j = 0; j < N; j++) { i = i + 1; } newtime = System.currentTimeMillis(); debug("addition(int):" + (newtime - oldtime)); oldtime = System.currentTimeMillis(); for (j = 0; j < N; j++) { f = f + 1; } newtime = System.currentTimeMillis(); debug("addition(float):" + (newtime - oldtime)); oldtime = System.currentTimeMillis(); for (j = 0; j < N; j++) { i = i * 3; } newtime = System.currentTimeMillis(); debug("scalar multiplication(int):" + (newtime - oldtime)); oldtime = System.currentTimeMillis(); for (j = 0; j < N; j++) { f = f * 3; } newtime = System.currentTimeMillis(); debug("scalar multiplication(float):" + (newtime - oldtime)); oldtime = System.currentTimeMillis(); for (j = 0; j < N; j++) { i = i * i; } newtime = System.currentTimeMillis(); debug("squaring(int):" + (newtime - oldtime)); oldtime = System.currentTimeMillis(); for (j = 0; j < N; j++) { f = f * f; } newtime = System.currentTimeMillis(); debug("squaring(float):" + (newtime - oldtime)); oldtime = System.currentTimeMillis(); for (j = 0; j < N; j++) { i2 = SquareRoot.sqrt(i); } newtime = System.currentTimeMillis(); debug("square_root(int):" + (newtime - oldtime)); for (j = 0; j < N; j++) { f2 = (float)Math.sqrt(f); } newtime = System.currentTimeMillis(); debug("square_root(float):" + (newtime - oldtime)); // scalar division: oldtime = System.currentTimeMillis(); i = 3000; for (j = 0; j < N; j++) { i3 = i/19; } newtime = System.currentTimeMillis(); debug("scalar division(int):" + (newtime - oldtime)); oldtime = System.currentTimeMillis(); f = 3000; for (j = 0; j < N; j++) { f3 = f/19; } newtime = System.currentTimeMillis(); debug("scalar division(float):" + (newtime - oldtime)); // division: oldtime = System.currentTimeMillis(); i = 3000; for (j = 0; j < N; j++) { i3 = i/i2; } newtime = System.currentTimeMillis(); debug("division(int):" + (newtime - oldtime)); oldtime = System.currentTimeMillis(); f = 3000; for (j = 0; j < N; j++) { f3 = f/f2; } newtime = System.currentTimeMillis(); debug("division(float):" + (newtime - oldtime)); // shift right: oldtime = System.currentTimeMillis(); i = 3000; for (j = 0; j < N; j++) { i3 = i >> 8; } newtime = System.currentTimeMillis(); debug("shift(int):" + (newtime - oldtime)); oldtime = System.currentTimeMillis(); f = 3000; for (j = 0; j < N; j++) { f3 = f / 256; } newtime = System.currentTimeMillis(); debug("shift(float):" + (newtime - oldtime)); } final static void debug(String o) { System.out.println(o); } }