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, пропонують більш інтуітивну підтримку комплексних чисел через вбудовані типи даних і багатший набір функцій бібліотеки. Незважаючи на це, продуктивність та контроль, які пропонує С, роблять його переважним вибором для завдань обчислення високої продуктивності, навіть якщо це означає поводження з трохи більш громіздким синтаксисом для комплексної арифметики.