当前位置: C语言 -- 标准库 -- <complex.h>

<complex.h>头文件

一、概述

根据ISO/IEC 9899:2024标准,<complex.h>头文件是可选头文件;如果实现定义了宏__STDC_NO_COMPLEX__,实现不需要提供<complex.h>头文件,也不需要支持<complex.h>头文件的功能。

<complex.h>头文件定义了多个宏并声明了多个函数,用以支持复数算术运算。

<complex.h>头文件存在多个函数组,这些函数组由一个主函数和具有相同函数名、后缀为f或者l的函数组成。主函数的参数为一个或者多个double complex类型参数,返回值类型为double complex或者double类型;后缀为f的函数的参数为一个或者多个float complex类型参数,返回值类型为float complex或者float类型;后缀为l的函数的参数为一个或者多个long double complex类型参数,返回值类型为long double complex或者long double类型。

除非另有明确说明,<complex.h>头文件中的值使用弧度(radians)表示,而不是角度(degrees)表示。

实现可能会设置宏errno,但ISO标准并不要求这样做。这种情况下依赖检查宏errno来捕获错误是不可靠的。


二、分支切割

<complex.h>头文件中的一些函数存在分支切割(branch cuts),在切割线上函数是不连续的。

对于符合ISO/IEC 9899:2024标准附录G中的规定、支持有符号0的实现(包括符合ISO/IEC 60559标准的实现。),0的符号用于区分切割线的两侧,这样从任意一侧无限逼近切割线时函数是连续的(格式限制除外。);例如:对于沿负实轴存在分支切割的平方根函数(square root function),切割线上侧(虚部为+0。)的函数值映射到正虚轴,切割线下侧(虚部为-0。)的函数值映射到负虚轴。

不支持有符号0的实现无法区分分支切割的两侧。这类实现定义切割线的原则:从切割线的有限端点出发,沿逆时针方向绕过该端点并逼近切割线时,函数是连续的(这里函数的分支切割都只有一个有限端点。),例如:对于平方根函数,从其有限端点沿负实轴的分支切割逆时针绕行,从上方逼近切割线,这样整个切割线映射到正虚轴。


<complex.h>头文件中定义的宏以及声明的函数具体如下:

编译提示(pragma):
CX_LIMITED_RANGE 表示是否支持常用数学公式的编译提示。

功能测试宏(feature test macro):
__STDC_VERSION_COMPLEX_H__ 表示<complex.h>头文件版本的宏。

宏(macro):
complex 表示复数类型的宏。
_Complex_I 表示float _Complex类型的具有虚数单位值的宏。
imaginary 表示虚数类型的宏。
_Imaginary_I 表示float _Imaginary类型的具有虚数单位值的宏。
I 表示虚数单位的宏。
CMPLX
CMPLXF
CMPLXL
构造复数的宏。

函数(function):
三角函数:
cacos
cacosf
cacosl
复数反余弦函数。
casin
casinf
casinl
复数反正弦函数。
catan
catanf
catanl
复数反正切函数。
ccos
ccosf
ccosl
复数余弦函数。
csin
csinf
csinl
复数正弦函数。
ctan
ctanf
ctanl
复数正切函数。
双曲函数:
cacosh
cacoshf
cacoshl
复数反双曲余弦函数。
casinh
casinhf
casinhl
复数反双曲正弦函数。
catanh
catanhf
catanhl
复数反双曲正切函数。
ccosh
ccoshf
ccoshl
复数双曲余弦函数。
csinh
csinhf
csinhl
复数双曲正弦函数。
ctanh
ctanhf
ctanhl
复数双曲正切函数。
指数函数和对数函数:
cexp
cexpf
cexpl
e为底数的复数指数函数。
clog
clogf
clogl
e为底数的复数对数函数。
幂函数和绝对值函数:
cabs
cabsf
cabsl
复数绝对值函数。
cpow
cpowf
cpowl
复数幂函数。
csqrt
csqrtf
csqrtl
复数平方根函数。
操作函数:
carg
cargf
cargl
计算相位角的函数。
cimag
cimagf
cimagl
计算虚部值的函数。
conj
conjf
conjl
计算共轭复数的函数。
cproj
cprojf
cprojl
计算参数在Riemann球面上投影的函数。
creal
crealf
creall
计算实部值的函数。