Арифметика комплексных чисел
| Если макроконстанта | (с C11) |
Язык программирования C, начиная с C99, поддерживает арифметику комплексных чисел с тремя встроенными типами double _Complex, float _Complex, и long double _Complex (см. _Complex). При включении заголовка <complex.h>, три типа комплексных чисел также доступны как double complex, float complex, и long double complex.
Помимо комплексных типов, могут поддерживаться три типа мнимых чисел: double _Imaginary, float _Imaginary, и long double _Imaginary (см. _Imaginary). При включении заголовка <complex.h>, три типа мнимых чисел также доступны как double imaginary, float imaginary, и long double imaginary.
Стандартные арифметические операторы +, -, *, / могут использоваться с вещественными, комплексными и мнимыми типами в любой комбинации.
| Рекомендуется, но не является обязательным, чтобы компилятор, определяющий |
(с C99) (до C11) |
| Мнимые числа поддерживаются, если определено | (с C11) |
Определено в заголовке <complex.h> |
|
|---|---|
Типы |
|
|
(C99) | макрос типа imaginary (макрос ключевого слова) |
|
(C99) | макрос типа complex (макрос ключевого слова) |
Мнимая константа |
|
|
(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.
Комплексное или мнимое число является нулём, если обе части являются положительными или отрицательными нулями.
Пример
#include <stdio.h>
#include <complex.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
Ссылки
- Стандарт C17 (ISO/IEC 9899:2018):
- 6.10.8.3/1/2
__STDC_NO_COMPLEX__(стр. 128) - 6.10.8.3/1/2
__STDC_IEC_559_COMPLEX__(стр. 128) - 7.3 Комплексные арифметические операции
<complex.h>(стр. 136-144) - 7.25 Типовые математические функции
<tgmath.h>(стр. 272-273) - 7.31.1 Комплексная арифметика
<complex.h>(стр. 391) - Приложение G (нормативное) Совместимые с IEC 60559 комплексные арифметические операции (стр. 469-479)
- Стандарт C11 (ISO/IEC 9899:2011):
- 6.10.8.3/1/2
__STDC_NO_COMPLEX__(стр. 177) - 6.10.8.3/1/2
__STDC_IEC_559_COMPLEX__(стр. 177) - 7.3 Комплексная арифметика
<complex.h>(стр. 188-199) - 7.25 Типовые математические функции
<tgmath.h>(стр. 373-375) - 7.31.1 Комплексная арифметика
<complex.h>(стр. 455) - Приложение G (нормативное) Совместимые с IEC 60559 комплексные арифметические операции (стр. 532-545)
- Стандарт C99 (ISO/IEC 9899:1999):
- 6.10.8/2
__STDC_IEC_559_COMPLEX__(стр. 161) - 7.3 Комплексная арифметика
<complex.h>(стр. 170-180) - 7.22 Типовые математические функции
<tgmath.h>(стр. 335-337) - 7.26.1 Комплексная арифметика
<complex.h>(стр. 401) - Приложение G (информативное) Совместимые с IEC 60559 комплексные арифметические операции (стр. 467-480)
См. также
| Документация C++ по Арифметике комплексных чисел |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/c/numeric/complex