変数の宣言は、次のように行う。
float complex a; double complex b; long double complex c; |
| 単精度 | crealf(), cimagf() |
| 倍精度 | creal(), cimag() |
| 長倍精度 | creall(), cimagl() |
(システム標準のコンパイラーならば、complex.h のパス名は /usr/include/complex.h であろうから、 一度どういうものがあるか読んでみると良い。)
虚数単位は I という名前で使える。 i は他で使われるだろうから大文字ということらしい (でも 1i とすれば虚数単位になるのかな)。 もし j が使いたければ
#undef I #define j _Imaginary_I |
/*
* test-with-complex.h.c
*/
#include <stdio.h>
#include <complex.h>
int main(void)
{
double complex a,b,c;
double re_b, im_b;
a = 1+2i;
printf("input Re b and Im b:");
scanf("%lf%lf", &re_b, &im_b);
b = re_b + im_b * I;
c = a + b;
printf("%f%+fi\n", creal(c), cimag(c));
return 0;
}
(某月某日) 某学生がはまった落とし穴。 complex double 型の数値を double 型の数値に代入して、 結果がおかしいと悩んでいた (代入の結果は、複素数値の実部になる。 代入直後に結果を表示したりすれば気がついただろうが、 計算の途中に紛れ込んでいたため、発見が遅れた。)。 これくらいはコンパイラーが警告して欲しいような気がするが、 もともと
int i; double x; ... i = x; |