Spec-Zone.ru › C

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

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

(начиная с 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.

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

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

(начиная с C99)
(до C11)

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

(начиная с C11)
Определено в заголовке <complex.h>
Типы
imaginary
(C99)
макрос мнимого типа
(макрос-ключевое слово)
complex
(C99)
макрос комплексного типа
(макрос-ключевое слово)
Мнимая константа
_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.

Комплексное или мнимое число является нулём, если обе его части являются положительными или отрицательными нулями.

Хотя 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

Ссылки

Дополнительные сведения
  • Стандарт C23 (ISO/IEC 9899:2024):
    • 6.10.8.3/1/2 __STDC_NO_COMPLEX__ (стр.: уточняется)
    • 6.10.8.3/1/2 __STDC_IEC_559_COMPLEX__ (стр.: уточняется)
    • 7.3 Комплексная арифметика <complex.h> (стр.: уточняется)
    • 7.25 Математические функции с обобщёнными типами <tgmath.h> (стр.: уточняется)
    • 7.31.1 Комплексная арифметика <complex.h> (стр.: уточняется)
    • Приложение G (нормативное). Комплексная арифметика, совместимая с IEC 60559 (стр.: уточняется)
  • Стандарт 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/c/numeric/complex

Spec-Zone.ru

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