複素数を操作する

C:
複素数を操作する

どのようにして:

C言語では、標準ライブラリ <complex.h> によって複素数がサポートされています。これを利用するには、double complex型(または単精度用のfloat complex)で変数を宣言します。基本的な操作の方法は以下のとおりです:

#include <stdio.h>
#include <complex.h>

int main() {
    double complex z1 = 1.0 + 2.0*I; // 複素数 1+2i を宣言
    double complex z2 = 1.0 - 2.0*I; // 別の複素数 1-2i を宣言

    // 加算
    double complex sum = z1 + z2;
    printf("Sum: %.2f + %.2fi\n", creal(sum), cimag(sum)); // 出力: Sum: 2.00 + 0.00i

    // 乗算
    double complex product = z1 * z2;
    printf("Product: %.2f + %.2fi\n", creal(product), cimag(product)); // 出力: Product: 5.00 + 0.00i

    // 複素共役
    double complex conjugate = conj(z1);
    printf("Conjugate of z1: %.2f + %.2fi\n", creal(conjugate), cimag(conjugate)); // 出力: Conjugate of z1: 1.00 - 2.00i

    // 絶対値
    double magnitude = cabs(z1);
    printf("Magnitude of z1: %.2f\n", magnitude); // 出力: Magnitude of z1: 2.24

    // 位相
    double phase = carg(z1);
    printf("Phase of z1: %.2f\n", phase); // ラジアン単位での出力

    return 0;
}

I<complex.h> において虚数単位を表す定数です。creal()cimag()のような関数はそれぞれ実部と虚部を抽出し、conj()は複素共役を計算します。複素数の絶対値と位相(引数)には、cabs()carg()が使用されます。

ディープダイブ

Cにおける複素数のサポートは比較的最近のもので、C99で標準化されました。それ以前は、C言語における複素数算術は煩雑で、しばしばカスタムデータ構造や関数が必要でした。<complex.h>や複素データ型の導入は、科学的および工学的応用における言語の能力を大きく向上させました。しかし、Pythonのような言語は、組み込みデータ型とより豊富なライブラリ機能を通じて、複素数に対するより直感的なサポートを提供していることに注意すべきです。これにもかかわらず、Cが提供する性能と制御は、複素数算術の若干煩雑な構文を扱いつつも、高性能コンピューティングタスクにおける選択肢として好まれています。