Поделиться через


Поддержка операций с комплексными числами в 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, , cacosfcacosl Вычисляет комплексный арккосинус комплексного числа
casin, , casinfcasinl Вычисляет комплексный арксинус комплексного числа
catan, , catanfcatanl Вычисляет комплексный арктангенс комплексного числа
ccos, , ccosfccosl Вычисляет комплексный косинус комплексного числа
csin, , csinfcsinl Вычисляет комплексный синус комплексного числа
ctan, , ctanfctanl Вычисляет комплексный тангенс комплексного числа

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

Function Description
cacosh, , cacoshfcacoshl Вычисляет комплексный гиперболический арккосинус комплексного числа
casinh, , casinhfcasinhl Вычисляет комплексный гиперболический арксинус комплексного числа
catanh, , catanhfcatanhl Вычисляет комплексный гиперболический арктангенс комплексного числа
ccosh, , ccoshfccoshl Вычисляет комплексный гиперболический косинус комплексного числа
csinh, , csinhfcsinhl Вычисляет комплексный гиперболический синус комплексного числа
ctanh, , ctanhfctanhl Вычисляет комплексный гиперболический тангенс комплексного числа

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

Function Description
cexp, , cexpfcexpl Вычисляет комплексную экспоненту комплексного числа с основанием e
clog, , clogfclogl Вычисляет комплексный натуральный (по основанию e) логарифм комплексного числа
clog10, , clog10fclog10l Вычисляет комплексный логарифм комплексного числа по основанию 10

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

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

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

Function Description
_Cbuild, , _FCbuild_LCbuild Формирует комплексное число из вещественной и мнимой частей
carg, , cargfcargl Вычисляет аргумент комплексного числа (также называемый фазовым углом)
cimag, , cimagfcimagl Вычисляет мнимую часть комплексного числа
conj, , conjfconjl Вычисляет комплексно сопряженную величину комплексного числа
cproj, , cprojfcprojl Вычисляет проекцию комплексного числа на сферу Римана
creal, , crealfcreall Вычисляет вещественную часть комплексного числа
norm, , normfnorml Вычисляет абсолютное значение комплексного числа в квадрате

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

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

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

См. также

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