Робота з комплексними числами

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("Сума: %.2f + %.2fi\n", creal(sum), cimag(sum)); // Вивід: Сума: 2.00 + 0.00i

    // Множення
    double complex product = z1 * z2;
    printf("Добуток: %.2f + %.2fi\n", creal(product), cimag(product)); // Вивід: Добуток: 5.00 + 0.00i

    // Комплексно спряжене
    double complex conjugate = conj(z1);
    printf("Спряжене z1: %.2f + %.2fi\n", creal(conjugate), cimag(conjugate)); // Вивід: Спряжене z1: 1.00 - 2.00i
    
    // Модуль
    double magnitude = cabs(z1);
    printf("Модуль z1: %.2f\n", magnitude); // Вивід: Модуль z1: 2.24

    // Фаза
    double phase = carg(z1);
    printf("Фаза z1: %.2f\n", phase); // Вивід в радіанах
    
    return 0;
}

Зауважте, що I - це константа, що представляє уявну одиницю в <complex.h>. Функції, як-от creal() і cimag(), вилучають відповідно реальну та уявну частини, тоді як conj() обчислює комплексно-спряжене. Для модуля і фази (аргументу) комплексних чисел використовуються cabs() і carg().

Поглиблений огляд

Підтримка комплексних чисел у С є порівняно недавньою, вона була стандартизована в C99. До цього арифметика комплексних чисел у С була обтяжливою, часто вимагаючи користувацьких структур даних і функцій. Включення <complex.h> та комплексних типів даних надало значний імпульс можливостям мови для наукових і інженерних застосувань. Однак варто зауважити, що деякі мови, як-от Python, пропонують більш інтуітивну підтримку комплексних чисел через вбудовані типи даних і багатший набір функцій бібліотеки. Незважаючи на це, продуктивність та контроль, які пропонує С, роблять його переважним вибором для завдань обчислення високої продуктивності, навіть якщо це означає поводження з трохи більш громіздким синтаксисом для комплексної арифметики.