<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 |
计算实部值的函数。 |