Поддержка операций с комплексными числами в 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 по категориям
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по