simpleCPQ.c
#include <stdio.h> #include <math.h> /* *** SAMPLE PROGRAM: file: simpleCPQ.c *** test_direct.c: makes use of the fortran subroutine CPQR79_(ndeg, coeff, root, ierr, work) which finds zeros of a polynomial. numbers are assumed complex and the the highest term is coeff[0] z^ndeg. the constant term is coeff[ndeg+1] */ #define REAL float #define DD 48 /* DD = (2 ndeg) (ndeg+1) x [REAL] = 4 3 = 12 */ struct complex {REAL re; REAL im;}; void cpqr79(int*, struct complex*, struct complex*,int*,REAL*); int main() { /* variables needed to pass to fortran function: */ int ndeg[1]; int ierr[1]; struct complex coeff[3]; struct complex root[2]; REAL work[DD]; /* variables for main(): */ int i=0; REAL f; /* define our polynomial; a simple quadratic (z+1)(z+2) */ coeff[0].re=1.; coeff[0].im=0.; /* 1. z^2 */ coeff[1].re=3.; coeff[1].im=0.; /* +3. z */ coeff[2].re=2.; coeff[2].im=0.; /* +2 */ ndeg[0]=2; /* since we have a quadratic */ /* Now we can call the SLATEC function! */ cpqr79(ndeg, coeff, root, ierr, work); puts("\n"); /* Now print out the result. */ for (i=0;i<ndeg[0];i++ ) printf("(%g,%g).",root[i].re,root[i].im); if (ierr[0]) printf("Error Flag = %d\n",ierr[0]); puts("\n"); return 0; /* the end */ } /* Try compiling with cc simpleCPQ.c -lm -lslatec -lxlf90 */