/* 複素演算 : 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;
}