class Puiss { static double puiss1(double x, int n) { if (n == 0) return 1; else return x * puiss1(x, n - 1); } static double puiss2(double x, int n) { if (n == 0) return 1; else { if (n % 2 == 0) { double y = puiss2(x, n / 2); return y * y; } else { double y = puiss2(x, (n - 1) / 2); return x * y * y; } } } public static void main(String[] args) { final int Nmin = 100; final int Nmax = 1000; final int Nstep = 100; final int M = 1000; // nombre de fois où le calcul est recommencé for (int n = Nmin; n <= Nmax; n += Nstep) { long c0; long c1; double s; System.out.println("N = " + n + ""); s = 0.0; c0 = System.nanoTime(); for (int i = 0; i < M; ++i) for (int k = 0; k <= n; ++k) s += 1.0 / puiss1(2, k); c1 = System.nanoTime(); System.out.println(" (version 1) somme = " + s); System.out.println(" temps : " + ((c1 - c0) / 1e9) + " secondes"); s = 0.0; c0 = System.nanoTime(); for (int i = 0; i < M; ++i) for (int k = 0; k <= n; ++k) s += 1.0 / puiss2(2, k); c1 = System.nanoTime(); System.out.println(" (version 2) somme = " + s); System.out.println(" temps : " + + ((c1 - c0) / 1e9) + " secondes"); } } }