// http://en.wikipedia.org/wiki/Fast_Hadamard_transform #include #include typedef double r; void hm(int m, r * x){int b; for(b=m; b>1; b>>=1) {int c=b>>1; int k; if(0) printf("bb %d %d\n", b, c); for(k=0; k #define s (1<<6) r f(r x){return sin(2*3.14159265358979*x/s);} // The shift amount above can be an integer from 0 thru at least 26. r w[s]; void p(r a) {int j; if(1)for(j=0; j 1.e-14) printf("gox %d %e\n", j, w[j]-f(j)*s);} return 0;}