web-dev-qa-db-ja.com

C複素数とprintf

(printfを使用して)複素数を印刷する方法は?たとえば、次のコードがある場合:

#include <stdio.h>
#include <complex.h>
int main(void)
{
    double complex dc1 = 3 + 2*I;
    double complex dc2 = 4 + 5*I;
    double complex result;

    result = dc1 + dc2;
    printf(" ??? \n", result);

    return 0;
}

..代わりにどの変換指定子(または何か他のもの)を使用する必要があります "???"

46
gameboy
printf("%f + i%f\n", creal(result), cimag(result));

C99複合型に特定のフォーマット指定子があるとは思いません。

53
John Calsbeek

%+f虚数部の正しい記号を選択してください:

printf("%f%+fi\n", crealf(I), cimagf(I));

出力:

0.000000+1.000000i

iが最後にあることに注意してください。

14
levif

GNU Cを使用すると、これは機能します:

printf("%f %f\n", complexnum);

または、虚数部の後に「i」のサフィックスを印刷したい場合:

printf("%f %fi\n", complexnum);
0
Lou

複素数は2つの実数として連続してメモリに格納されるため、

printf("%g + i%g\n", result);

同様に動作しますが、パラメータのタイプと数がフォーマットと一致しないため、gccでコンパイラ警告が生成されます。デバッグ時にはピンチでこれを行いますが、製品コードでは行いません。

0
Kipp Cannon