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

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("Сумма: %.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().

Глубокое погружение

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