Арифметика комплексных чисел
| Если реализацией определена макроконстанта | (начиная с C11) |
Язык программирования C, начиная с C99, поддерживает вычисления с комплексными числами с помощью трёх встроенных типов double_Complex, float_Complex и longdouble_Complex (см. _Complex). Если включён заголовок <complex.h>, три типа комплексных чисел также доступны под именами doublecomplex, floatcomplex, longdoublecomplex.
Помимо комплексных типов могут поддерживаться три мнимых типа: double_Imaginary, float_Imaginary и longdouble_Imaginary (см. _Imaginary). Если включён заголовок <complex.h>, три мнимых типа также доступны под именами doubleimaginary, floatimaginary и longdoubleimaginary.
Стандартные арифметические операторы +, -, *, / можно использовать с вещественными, комплексными и мнимыми типами в любых сочетаниях.
| Компилятору, определяющему |
(начиная с C99) (до C11) |
| Мнимые числа поддерживаются, если определена | (начиная с C11) |
Определено в заголовке <complex.h> |
|
|---|---|
Типы |
|
|
(C99) | макрос мнимого типа (макрос-ключевое слово) |
|
(C99) | макрос комплексного типа (макрос-ключевое слово) |
Мнимая константа |
|
|
(C99) | константа мнимой единицы i (макроконстанта) |
|
(C99) | константа комплексной единицы i (макроконстанта) |
|
(C99) | константа комплексной или мнимой единицы i (макроконстанта) |
Манипуляции |
|
|
(C11)(C11)(C11) | создаёт комплексное число из вещественной и мнимой частей (макрос-функция) |
|
(C99)(C99)(C99) | вычисляет вещественную часть комплексного числа (функция) |
|
(C99)(C99)(C99) | вычисляет мнимую часть комплексного числа (функция) |
|
(C99)(C99)(C99) | вычисляет модуль комплексного числа (функция) |
|
(C99)(C99)(C99) | вычисляет фазовый угол комплексного числа (функция) |
|
(C99)(C99)(C99) | вычисляет комплексное сопряжение (функция) |
|
(C99)(C99)(C99) | вычисляет проекцию на сферу Римана (функция) |
Экспоненциальные функции |
|
|
(C99)(C99)(C99) | вычисляет комплексную экспоненту по основанию e (функция) |
|
(C99)(C99)(C99) | вычисляет комплексный натуральный логарифм (функция) |
Степенные функции |
|
|
(C99)(C99)(C99) | вычисляет комплексную степенную функцию (функция) |
|
(C99)(C99)(C99) | вычисляет комплексный квадратный корень (функция) |
Тригонометрические функции |
|
|
(C99)(C99)(C99) | вычисляет комплексный синус (функция) |
|
(C99)(C99)(C99) | вычисляет комплексный косинус (функция) |
|
(C99)(C99)(C99) | вычисляет комплексный тангенс (функция) |
|
(C99)(C99)(C99) | вычисляет комплексный арксинус (функция) |
|
(C99)(C99)(C99) | вычисляет комплексный арккосинус (функция) |
|
(C99)(C99)(C99) | вычисляет комплексный арктангенс (функция) |
Гиперболические функции |
|
|
(C99)(C99)(C99) | вычисляет комплексный гиперболический синус (функция) |
|
(C99)(C99)(C99) | вычисляет комплексный гиперболический косинус (функция) |
|
(C99)(C99)(C99) | вычисляет комплексный гиперболический тангенс (функция) |
|
(C99)(C99)(C99) | вычисляет комплексный обратный гиперболический синус (функция) |
|
(C99)(C99)(C99) | вычисляет комплексный обратный гиперболический косинус (функция) |
|
(C99)(C99)(C99) | вычисляет комплексный обратный гиперболический тангенс (функция) |
Примечания
Следующие имена функций могут быть(начиная с C23) зарезервированы для будущего добавления в <complex.h> и недоступны для использования в программах, включающих этот заголовок: cerf, cerfc, cexp2, cexpm1, clog10, clog1p, clog2, clgamma, ctgamma, csinpi, ccospi, ctanpi, casinpi, cacospi, catanpi, ccompoundn, cpown, cpowr, crootn, crsqrt, cexp10m1, cexp10, cexp2m1, clog10p1, clog2p1, clogp1(начиная с C23), а также их варианты с суффиксами -f и -l.
Хотя в стандарте C для обратных гиперболических функций используются названия «комплексный обратный гиперболический синус» и т. д., обратные функции гиперболических функций являются функциями площадей. Их аргумент — площадь гиперболического сектора, а не дуга. Правильные названия — «комплексный обратный гиперболический синус» и т. д. Некоторые авторы используют названия «комплексный гиперболический ареасинус» и т. д.
Комплексное или мнимое число является бесконечным, если бесконечна одна из его частей, даже если другая часть является NaN.
Комплексное или мнимое число является конечным, если обе его части не являются ни бесконечностями, ни NaN.
Комплексное или мнимое число является нулём, если обе его части являются положительными или отрицательными нулями.
Хотя MSVC предоставляет заголовок <complex.h>, он не реализует комплексные числа как встроенные типы, а представляет их в виде структур struct, несовместимых со стандартными комплексными типами C и не поддерживающих операторы +, -, *, /.
Пример
#include <complex.h>
#include <stdio.h>
#include <tgmath.h>
int main(void)
{
double complex z1 = I * I; // imaginary unit squared
printf("I * I = %.1f%+.1fi\n", creal(z1), cimag(z1));
double complex z2 = pow(I, 2); // imaginary unit squared
printf("pow(I, 2) = %.1f%+.1fi\n", creal(z2), cimag(z2));
double PI = acos(-1);
double complex z3 = exp(I * PI); // Euler's formula
printf("exp(I*PI) = %.1f%+.1fi\n", creal(z3), cimag(z3));
double complex z4 = 1 + 2 * I, z5 = 1 - 2 * I; // conjugates
printf("(1+2i)*(1-2i) = %.1f%+.1fi\n", creal(z4 * z5), cimag(z4 * z5));
}
Вывод:
I * I = -1.0+0.0i pow(I, 2) = -1.0+0.0i exp(I*PI) = -1.0+0.0i (1+2i)*(1-2i) = 5.0+0.0i
Ссылки
| Дополнительные сведения |
|---|
|
См. также
| Документация по C++ для арифметики комплексных чисел |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/c/numeric/complex