Поддержка операций с комплексными числами в 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 по категориям