diff --git a/slides/exemples/pow.c b/slides/exemples/pow.c new file mode 100644 index 0000000000000000000000000000000000000000..f2ab6af0106c9993cef2cbce52d0f7288a600f58 --- /dev/null +++ b/slides/exemples/pow.c @@ -0,0 +1,46 @@ +#include <stdio.h> + +double pow_naive(double x, int n) { + if (n == 0) { + return 1.0; + } + double res = x; + for (int i = 1; i < n; i++) { + res *= x; + } + return res; +} + +double pow_rec(double x, int n) { + if (n == 0) { + return 1.0; + } else { + return x * pow_rec(x, n - 1); + } +} + +double pow_eff(double x, int n) { + if (n == 0) { + return 1.0; + } else if (n % 2 == 0) { + double intermediate = pow_eff(x, n / 2); + return intermediate * intermediate; + } else { + return x * pow_eff(x, n - 1); + } +} + +int main() { + double x = 2; + int n = 10000; + double y = 0; + for (int i = 0; i < 1000; ++i) { + // y += pow_eff(x, n); + y += pow_naive(x, n); + } + + // printf("%lf^%d = %lf\n", x, n, pow_naive(x, n)); + // printf("%d^%d = %lf\n", x, n, pow_rec(x, n)); + // printf("%lf^%d = %lf\n", x, n, pow_eff(x, n)); + printf("y = %lf\n", y); +}