Поддержка операций с комплексными числами в C

Библиотека среды выполнения Microsoft C (CRT) предоставляет сложные математические функции библиотеки, включая все те, которые требуются ISO C99. Компилятор не поддерживает напрямую complex или _Complex ключевое слово, поэтому реализация Майкрософт использует типы структур для представления сложных чисел.

Эти функции предназначены для балансировки производительности и правильности. Так как получение правильно округленного результата может оказаться неоправданно дорогим, эти функции позволяют получить значение, максимально приближенное к правильно округленному результату. В большинстве случаев результат производится в пределах +/-1 единицы наименьшей точности (ULP) правильно округленного результата, хотя в некоторых случаях может возникнуть более высокая неточность.

В основе процедур для работы с комплексными числами лежат функции библиотеки математических операций для обработки чисел с плавающей запятой. Эти функции имеют различные реализации для различных архитектур ЦП. Например, в 32-разрядных CRT x86 могут использоваться не такие реализации, как в 64-разрядных CRT x64. Кроме того, некоторые функции могут содержать сразу несколько реализаций заданной архитектуры ЦП. Наиболее эффективная реализация выбирается в среде выполнения динамически в зависимости от того, какие наборы инструкций поддерживает ЦП. Например, в 32-разрядных CRT x86 некоторые функции включают сразу две реализации — x87 и SSE2. При работе на ЦП, который поддерживает SSE2, используется более быстрая реализация SSE2. При запуске на ЦП, который не поддерживает SSE2, используется медленная реализация x87. Так как различные реализации функций математической библиотеки могут использовать для получения результатов различные инструкции ЦП и разнообразные алгоритмы, эти функции могут давать различные результаты на разных ЦП. В большинстве случаев результаты находятся в пределах +/-1 ULP правильно округленного результата, но фактические результаты могут отличаться по ЦП.

Типы, используемые в операциях с комплексными числами

Реализация заголовка complex.h Майкрософт определяет эти типы как эквиваленты для стандартных собственных сложных типов C99:

Стандартный тип Тип Майкрософт
float complex или float _Complex _Fcomplex
double complex или double _Complex _Dcomplex
long double complex или long double _Complex _Lcomplex

Заголовок math.h определяет отдельный тип, struct _complexиспользуемый для _cabs функции. Тип struct _complex не используется эквивалентными сложными математическими функциями cabs, , cabsf. cabsl

Комплексные константы и макросы

I определяется как сложный тип _Fcomplex , инициализированный с помощью { 0.0f, 1.0f }.

Тригонометрические функции

Function Description
cacos, cacosf, cacosl Вычисляет комплексный арккосинус комплексного числа
casin, casinf, casinl Вычисляет комплексный арксинус комплексного числа
catan, catanf, catanl Вычисляет комплексный арктангенс комплексного числа
ccos, ccosf, ccosl Вычисляет комплексный косинус комплексного числа
csin, csinf, csinl Вычисляет комплексный синус комплексного числа
ctan, ctanf, ctanl Вычисляет комплексный тангенс комплексного числа

Гиперболические функции

Function Description
cacosh, cacoshf, cacoshl Вычисляет комплексный гиперболический арккосинус комплексного числа
casinh, casinhf, casinhl Вычисляет комплексный гиперболический арксинус комплексного числа
catanh, catanhf, catanhl Вычисляет комплексный гиперболический арктангенс комплексного числа
ccosh, ccoshf, ccoshl Вычисляет комплексный гиперболический косинус комплексного числа
csinh, csinhf, csinhl Вычисляет комплексный гиперболический синус комплексного числа
ctanh, ctanhf, ctanhl Вычисляет комплексный гиперболический тангенс комплексного числа

Экспоненциальные и логарифмические функции

Function Description
cexp, cexpf, cexpl Вычисляет комплексную экспоненту комплексного числа с основанием e
clog, clogf, clogl Вычисляет комплексный натуральный (по основанию e) логарифм комплексного числа
clog10, clog10f, clog10l Вычисляет комплексный логарифм комплексного числа по основанию 10

Функции возведения в степень и вычисления абсолютного значения

Function Description
cabs, cabsf, cabsl Вычисляет комплексное абсолютное значение (также называемое нормой, модулем или порядком величины) комплексного числа
cpow, cpowf, cpowl Вычисление сложной функции питания
csqrt, csqrtf, csqrtl Вычисляет комплексный квадратный корень комплексного числа

Функции обработки

Function Description
_Cbuild, _FCbuild, _LCbuild Формирует комплексное число из вещественной и мнимой частей
carg, cargf, cargl Вычисляет аргумент комплексного числа (также называемый фазовым углом)
cimag, cimagf, cimagl Вычисляет мнимую часть комплексного числа
conj, conjf, conjl Вычисляет комплексно сопряженную величину комплексного числа
cproj, cprojf, cprojl Вычисляет проекцию комплексного числа на сферу Римана
creal, crealf, creall Вычисляет вещественную часть комплексного числа
norm, normf, norml Вычисляет абсолютное значение комплексного числа в квадрате

Функции арифметических операций

Поскольку сложные числа не являются собственным типом в компиляторе Майкрософт, стандартные арифметические операторы не определены для сложных типов. Для удобства представлены следующие библиотечные функции, которые позволяют выполнять некоторые операции с комплексными числами в пользовательском коде.

Function Description
_Cmulcc, _FCmulcc, _LCmulcc Произведение двух комплексных чисел
_Cmulcr, _FCmulcr, _LCmulcr Умножает комплексное число на число с плавающей запятой

См. также

Математика с универсальным типом
Универсальные подпрограммы среды выполнения C по категориям