Complex number arithmetic
|
Если реализация определяет макроконстанту
|
(начиная с 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)
|
макрос мнимого типа
(макрос-ключевое слово) |
|
|
(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
s, которые несовместимы со стандартными комплексными типами C и не поддерживают операторы
+
,
-
,
*
,
/
.
Пример
#include <complex.h> #include <stdio.h> #include <tgmath.h> int main(void) { double complex z1 = I * I; // квадрат мнимой единицы printf("I * I = %.1f%+.1fi\n", creal(z1), cimag(z1)); double complex z2 = pow(I, 2); // квадрат мнимой единицы printf("pow(I, 2) = %.1f%+.1fi\n", creal(z2), cimag(z2)); double PI = acos(-1); double complex z3 = exp(I * PI); // формула Эйлера printf("exp(I*PI) = %.1f%+.1fi\n", creal(z3), cimag(z3)); double complex z4 = 1 + 2 * I, z5 = 1 - 2 * I; // комплексно-сопряженные числа 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++ документация
для
Арифметики комплексных чисел
|