[fun-gen] prepare for complex coefficients

This commit is contained in:
Lucas 2020-03-17 10:46:38 +00:00
parent 78fa2ba50a
commit f353cab392

View File

@ -15,6 +15,7 @@
#define _DEFAULT_SOURCE #define _DEFAULT_SOURCE
#endif #endif
#include <complex.h>
#include <math.h> #include <math.h>
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
@ -29,14 +30,14 @@
struct poly { struct poly {
int degree; int degree;
double *coefs; double complex *coefs;
const char *expr; const char *expr;
}; };
static void static void
poly_init(struct poly *p, unsigned int degree, const char *expr) poly_init(struct poly *p, unsigned int degree, const char *expr)
{ {
if ((p->coefs = malloc((degree + 1) * sizeof(double))) == NULL) if ((p->coefs = malloc((degree + 1) * sizeof(*p->coefs))) == NULL)
errx(1, "out of memory"); errx(1, "out of memory");
p->degree = degree; p->degree = degree;
@ -107,9 +108,10 @@ print_fun_body(size_t n, struct poly *polys)
printf("\ta *= z;\n"); printf("\ta *= z;\n");
for (j = n; j > i; j--) for (j = n; j > i; j--)
if (polys[j - 1].coefs[d] != 0.0L) if (polys[j - 1].coefs[d] != 0.0L)
printf("\t%s += %.20f * a;\n", printf("\t%s += (%.20f + I * %.20f) * a;\n",
polys[j - 1].expr, polys[j - 1].expr,
polys[j - 1].coefs[d]); creal(polys[j - 1].coefs[d]),
cimag(polys[j - 1].coefs[d]));
printf("\n"); printf("\n");
} }
} }