#include <math.h>
#include <stdio.h>
double v[1024];
double pnorm_i( int n, int i, double s, double p ) {
return ( n
== i
)? s
: pnorm_i
( n
, i
+ 1, s
+ pow( fabs( v
[ i
] ), p
), p
); }
double pnorm( int n, double p ) {
return pow( pnorm_i
( n
, 0, 0.0, p
), 1.0/2.0 ); }
int main()
{
v[0] = 1/2; v[1] = -1/2;
printf( "#1, 1-norm: %f\n", pnorm
( 2, 1 )); printf( "#1, 2-norm: %f\n", pnorm
( 2, 2 ));
v[0] = 1; v[1] = 1; v[2] = 1; v[3] = 1; v[4] = 1;
printf( "#2, 1-norm: %f\n", pnorm
( 5, 1 )); printf( "#2, 2-norm: %f\n", pnorm
( 5, 2 ));
v[0] = -1; v[1] = 2; v[2] = 0; v[3] = 3;
printf( "#3, 1-norm: %f\n", pnorm
( 4, 1 )); printf( "#3, 2-norm: %f\n", pnorm
( 4, 2 )); }
I2luY2x1ZGUgPG1hdGguaD4KI2luY2x1ZGUgPHN0ZGlvLmg+CmRvdWJsZSB2WzEwMjRdOwoKZG91YmxlIHBub3JtX2koIGludCBuLCBpbnQgaSwgZG91YmxlIHMsIGRvdWJsZSBwICkgewogIHJldHVybiAoIG4gPT0gaSApPyBzOiBwbm9ybV9pKCBuLCBpICsgMSwgcyArIHBvdyggZmFicyggdlsgaSBdICksIHAgKSwgcCApOwp9CmRvdWJsZSBwbm9ybSggaW50IG4sIGRvdWJsZSBwICkgewogIHJldHVybiBwb3coIHBub3JtX2koIG4sIDAsIDAuMCwgcCApLCAxLjAvMi4wICk7Cn0KCmludCBtYWluKCkKewogIHZbMF0gPSAxLzI7IHZbMV0gPSAtMS8yOwogIHByaW50ZiggIiMxLCAxLW5vcm06ICVmXG4iLCBwbm9ybSggMiwgMSApKTsKICBwcmludGYoICIjMSwgMi1ub3JtOiAlZlxuIiwgcG5vcm0oIDIsIDIgKSk7CgogIHZbMF0gPSAxOyB2WzFdID0gMTsgdlsyXSA9IDE7IHZbM10gPSAxOyB2WzRdID0gMTsKICBwcmludGYoICIjMiwgMS1ub3JtOiAlZlxuIiwgcG5vcm0oIDUsIDEgKSk7CiAgcHJpbnRmKCAiIzIsIDItbm9ybTogJWZcbiIsIHBub3JtKCA1LCAyICkpOwoKICB2WzBdID0gLTE7IHZbMV0gPSAyOyB2WzJdID0gMDsgdlszXSA9IDM7CiAgcHJpbnRmKCAiIzMsIDEtbm9ybTogJWZcbiIsIHBub3JtKCA0LCAxICkpOwogIHByaW50ZiggIiMzLCAyLW5vcm06ICVmXG4iLCBwbm9ybSggNCwgMiApKTsKfQo=