Spec-Zone.ru › C

Арифметика комплексных чисел

Если макроконстанта __STDC_NO_COMPLEX__ определена реализацией, то комплексные типы, заголовок <complex.h> и все перечисленные здесь имена не предоставляются.

(с 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.

Стандартные арифметические операторы +, -, *, / могут использоваться с вещественными, комплексными и мнимыми типами в любой комбинации.

Рекомендуется, но не является обязательным, чтобы компилятор, определяющий __STDC_IEC_559_COMPLEX__, поддерживал мнимые числа. POSIX рекомендует проверить, определена ли макрос _Imaginary_I, чтобы определить поддержку мнимых чисел.

(с C99)
(до C11)

Мнимые числа поддерживаются, если определено __STDC_IEC_559_COMPLEX__ или __STDC_IEC_60559_COMPLEX__(с C23).

(с C11)
Определено в заголовке <complex.h>
Типы
imaginary
(C99)
макрос типа imaginary
(макрос ключевого слова)
complex
(C99)
макрос типа complex
(макрос ключевого слова)
Мнимая константа
_Imaginary_I
(C99)
константа мнимой единицы i
(константа макроса)
_Complex_I
(C99)
константа комплексной единицы i
(константа макроса)
I
(C99)
константа комплексной или мнимой единицы i
(константа макроса)
Обработка
CMPLXCMPLXFCMPLXL
(C11)(C11)(C11)
создает комплексное число из действительной и мнимой частей
(макрос функции)
crealcrealfcreall
(C99)(C99)(C99)
вычисляет действительную часть комплексного числа
(функция)
cimagcimagfcimagl
(C99)(C99)(C99)
вычисляет мнимую часть комплексного числа
(функция)
cabscabsfcabsl
(C99)(C99)(C99)
вычисляет модуль комплексного числа
(функция)
cargcargfcargl
(C99)(C99)(C99)
вычисляет фазовый угол комплексного числа
(функция)
conjconjfconjl
(C99)(C99)(C99)
вычисляет комплексно сопряженное значение
(функция)
cprojcprojfcprojl
(C99)(C99)(C99)
вычисляет проекцию на сферу Римана
(функция)
Экспоненциальные функции
cexpcexpfcexpl
(C99)(C99)(C99)
вычисляет экспоненту комплексного числа по основанию e
(функция)
clogclogfclogl
(C99)(C99)(C99)
вычисляет комплекный натуральный логарифм
(функция)
Функции возведения в степень
cpowcpowfcpowl
(C99)(C99)(C99)
вычисляет комплексную функцию возведения в степень
(функция)
csqrtcsqrtfcsqrtl
(C99)(C99)(C99)
вычисляет комплекный квадратный корень
(функция)
Тригонометрические функции
csincsinfcsinl
(C99)(C99)(C99)
вычисляет комплекный синус
(функция)
ccosccosfccosl
(C99)(C99)(C99)
вычисляет комплекный косинус
(функция)
ctanctanfctanl
(C99)(C99)(C99)
вычисляет комплекный тангенс
(функция)
casincasinfcasinl
(C99)(C99)(C99)
вычисляет комплекный арксинус
(функция)
cacoscacosfcacosl
(C99)(C99)(C99)
вычисляет комплекный арккосинус
(функция)
catancatanfcatanl
(C99)(C99)(C99)
вычисляет комплекный арктангенс
(функция)
Гиперболические функции
csinhcsinhfcsinhl
(C99)(C99)(C99)
вычисляет комплекный гиперболический синус
(функция)
ccoshccoshfccoshl
(C99)(C99)(C99)
вычисляет комплексный гиперболический косинус
(функция)
ctanhctanhfctanhl
(C99)(C99)(C99)
вычисляет комплекный гиперболический тангенс
(функция)
casinhcasinhfcasinhl
(C99)(C99)(C99)
вычисляет комплексный обратный гиперболический синус
(функция)
cacoshcacoshfcacoshl
(C99)(C99)(C99)
вычисляет комплексный обратный гиперболический косинус
(функция)
catanhcatanhfcatanhl
(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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API