// このプログラムをcomplx.c"という名前で保存して、
// gcc -g complx.c -o complx -std=c99
// でコンパイルして下さい。
// 複素計算式
#include <stdio.h>
#include <stdlib.h>
typedef struct complx
{
double x;//実数部
double y;//虚数部
} complx;
// 共役複素数
complx cconj(complx a)
{
a.y = -a.y;
return a;
}
//加算
complx cadd(complx a, complx b)
{
complx c;
c.x = a.x + b.x;
c.y = a.y + b.y;
return c;
}
//減算
complx csub(complx a, complx b)
{
complx c;
c.x = a.x - b.x;
c.y = a.y - b.y;
return c;
}
//乗算
complx cmul(complx a, complx b)
{
complx c;
c.x = a.x * b.x - a.y * b.y;
c.y = a.x * b.y + a.y * b.x;
return c;
}
//除算
complx cdiv(complx a, complx b)
{
a = cmul(a, cconj(b));
b = cmul(b, cconj(b));
a.x /= b.x;
a.y /= b.x;
return a;
}
int main ()
{
complx a,b,c;
a.x = 1.0;
a.y = 2.0;
b.x = 3.0;
b.y = 4.0;
c = cdiv(a,b);
printf("%f %f\n", c.x, c.y);
// 出力結果
// 0.440000 0.080000
// (参考)Matlabの計算結果
// a = 1.0000 + 2.0000i
// b = 3.0000 + 4.0000i
// a/b
//ans = 0.4400 + 0.0800i
}