fork download
  1. #include <math.h>
  2. #include <stdio.h>
  3.  
  4. double pnorm_i(int n, double *a, double p) {
  5. return (n < 0) ? 0.0 : pow(fabs(a[n]), p) + pnorm_i(n - 1, a, p);
  6. }
  7. double pnorm(double p, int n, double *a) {
  8. return pow(pnorm_i(n - 1, a, p), 1.0 / p);
  9. }
  10.  
  11. int main() {
  12. double a[] = { 0.5, -0.5 };
  13. double b[] = { 1.0, 1.0, 1.0, 1.0, 1.0 };
  14. double c[] = { -1.0, 2.0, 0.0, 3.0 };
  15. printf("%f\n", pnorm(1.0, sizeof(a) / sizeof(double), a));
  16. printf("%f\n", pnorm(1.0, sizeof(b) / sizeof(double), b));
  17. printf("%f\n", pnorm(1.0, sizeof(c) / sizeof(double), c));
  18. putchar('\n');
  19. printf("%f\n", pnorm(2.0, sizeof(a) / sizeof(double), a));
  20. printf("%f\n", pnorm(2.0, sizeof(b) / sizeof(double), b));
  21. printf("%f\n", pnorm(2.0, sizeof(c) / sizeof(double), c));
  22. putchar('\n');
  23. printf("%f\n", pnorm(3.0, sizeof(a) / sizeof(double), a));
  24. printf("%f\n", pnorm(3.0, sizeof(b) / sizeof(double), b));
  25. printf("%f\n", pnorm(3.0, sizeof(c) / sizeof(double), c));
  26. putchar('\n');
  27. return 0;
  28. }
  29. /* end */
  30.  
Success #stdin #stdout 0.02s 1720KB
stdin
Standard input is empty
stdout
1.000000
5.000000
6.000000

0.707107
2.236068
3.741657

0.629961
1.709976
3.301927