#include <stdio.h>
#include <math.h>
#include "COMPLEX.h"
#define PI 3.141592625
main(int argc, char *argv[])
{ int i, j, N = atoi(argv[1]);
Complex t, x;
printf("%dth complex roots of unity\n", N);
for (i = 0; i < N; i++)
{ float r = 2.0*PI*i/N;
t = COMPLEXinit(cos(r), sin(r));
printf("%2d %6.3f %6.3f ", i, Re(t), Im(t));
for (x = t, j = 0; j < N-1; j++)
x = COMPLEXmult(t, x);
printf("%6.3f %6.3f\n", Re(x), Im(x));
}
}
-----
typedef struct { float Re; float Im; } Complex;
Complex COMPLEXinit(float, float);
float Re(Complex);
float Im(Complex);
Complex COMPLEXmult(Complex, Complex);
-----
#include "COMPLEX.h"
Complex COMPLEXinit(float Re, float Im)
{ Complex t; t.Re = Re; t.Im = Im; return t; }
float Re(Complex z)
{ return z.Re; }
float Im(Complex z)
{ return z.Im; }
Complex COMPLEXmult(Complex a, Complex b)
{ Complex t;
t.Re = a.Re*b.Re - a.Im*b.Im;
t.Im = a.Re*b.Im + a.Im*b.Re;
return t;
}
-----
typedef struct complex *Complex;
Complex COMPLEXinit(float, float);
float Re(Complex);
float Im(Complex);
Complex COMPLEXmult(Complex, Complex);
-----
#include <stdlib.h>
#include "COMPLEX.h"
struct complex { float Re; float Im; };
Complex COMPLEXinit(float Re, float Im)
{ Complex t = malloc(sizeof *t);
t->Re = Re; t->Im = Im;
return t;
}
float Re(Complex z)
{ return z->Re; }
float Im(Complex z)
{ return z->Im; }
Complex COMPLEXmult(Complex a, Complex b)
{
return COMPLEXinit(Re(a)*Re(b) - Im(a)*Im(b),
Re(a)*Im(b) + Im(a)*Re(b));
}
Friday, 11 May 2012
Handling Complex Numbers in C
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment