+ default: {
+#ifdef notdef
+ unsigned pp = t*m + 1;
+ unsigned uu;
+ unsigned j;
+ struct cplx { double r, i; };
+ struct cplx e, n;
+ struct cplx *f;
+
+ do uu = GR_RANGE(rr, pp); while (order(uu, pp) != t);
+ f = xmalloc(sizeof(struct cplx) * (m + 1));
+ for (i = 0; i <= m; i++) f[i].r = f[i].i = 0;
+ f[0].r = 1;
+ printf("poly init; type = %u\n", t);
+ for (i = m + 1; i--; )
+ printf("%3u: %g + %g i\n", i, f[i].r, f[i].i);
+ putchar('\n');
+ for (i = 1; i <= m; i++) {
+ e.r = e.i = 0;
+ for (j = 0; j < t; j++) {
+ double z = (pow(2, i) * pow(uu, j) * PI)/pp;
+ e.r -= cos(z); e.i -= sin(z);
+ }
+ printf("new factor: %g + %g i\n", e.r, e.i);
+ for (j = i; j--; ) {
+ f[j + 1].r += f[j].r;
+ f[j + 1].i += f[j].i;
+ n.r = f[j].r * e.r - f[j].i * e.i;
+ n.i = f[j].r * e.i + f[j].i * e.r;
+ f[j] = n;
+ }
+ printf("poly after %u iters\n", i);
+ for (j = m + 1; j--; )
+ printf("%3u: %g + %g i\n", j, f[j].r, f[j].i);
+ putchar('\n');
+ }
+ xfree(f);
+ p = MP_ZERO;
+#else
+ abort();
+#endif
+ } break;