next up previous contents
Next: この文書について ... Up: 付録E 想起した曲をFFTするプログラム Previous: E.2 プログラムリスト : fft.c

E.3 プログラムリスト : complex.c

/* 複素演算 : complex.c */

#include <math.h>
#include "complex.h"                   /* ヘッダーファイル */

complex cadd(complex *x, complex *y)   /* === 加算 === */
{
  complex z;
  z.re = x->re + y->re;
  z.im = x->im + y->im;
  return z;
}

complex csub(complex *x, complex *y)   /* === 減算 === */
{
  complex z;
  z.re = x->re - y->re;
  z.im = x->im - y->im;
  return z;
}

complex cmul(complex *x, complex *y)  /* === 乗算 ==== */
{
  complex z;
  z.re = x->re * y->re - x->im * y->im;
  z.im = x->re * y->im + x->im * y->re;
  return z;
}

complex cdiv(complex *x, complex *y)  /* === 除算 === */
{
  complex z;
  double tmp;
  tmp = y->re * y->re + y->im * y->im;
  z.re = ( x->re * y->re + x->im * y->im ) / tmp;
  z.im = ( x->im * y->re - x->re * y->im ) / tmp;
  return z;
}

double real(complex *z)               /* === 実数部 === */
{
  return z->re;
}

double aimag(complex *z)              /* === 虚数部 === */
{
  return z->im;
}

double cabso(complex *z)              /* === 絶対値 === */
{
  return sqrt(z->re * z->re + z->im * z->im);
}

complex conjg(complex *z)              /* === 共役複素数 === */
{
  complex a;
  a.re = z->re;
  a.im = -z->im;
  return a;
}

complex cmplx(double x, double y)     /* === 複素化 === */
{
  complex z;
  z.re = x;
  z.im = y;
  return z;
}



Deguchi Toshinori
Thu Jul 13 11:47:42 JST 2000