C 复数数学支持

Microsoft C 运行时库 (CRT) 提供了复数数学库函数,包括 ISO C99 需要的所有函数。 编译器不直接支持 complex_Complex 关键字,因此 Microsoft 实现使用结果类型表示复数。

这些函数的实现是为了平衡性能与正确性。 因为产生正确舍入的结果可能成本过高,这些函数旨在有效地生成接近正确舍入结果的近似结果。 在大多数情况下,虽然可能存在误差较大的情况,但生成的结果在正确舍入结果的 +/-1 最小精度单位 (ULP) 范围内。

复数数学例程依赖于浮点数学库函数进行实现。 这些函数具有不同 CPU 体系结构的不同实现。 例如,相比 64 位 x64 CRT,32 位 x86 CRT 可能具有不同的实现。 此外,某些函数可能有适用于给定 CPU 体系结构的多个实现。 在运行时动态地选择最有效的实现,具体取决于受 CPU 支持的指令集。 例如,在 32 位 x86 CRT 中,一些函数同时具有 x87 实现和 SSE2 实现。 在支持 SSE2 的 CPU 上运行时,使用速度更快的 SSE2 实现。 在不支持 SSE2 的 CPU 上运行时,使用速度较慢的 x87 实现。 数学库函数的不同实现可能会使用不同的 CPU 指令和不同的算法来生成其结果,因此,这些函数可能会在各 CPU 中产生不同的结果。 在大多数情况下,结果在正确舍入结果的 +/-1 ULP 范围内,但实际结果在各 CPU 中可能会有所不同。

复数数学中使用的类型

complex.h 标头的 Microsoft 实现将这些类型定义为 C99 标准本机复数类型的等效项:

标准类型 Microsoft 类型
float complexfloat _Complex _Fcomplex
double complexdouble _Complex _Dcomplex
long double complexlong double _Complex _Lcomplex

math.h 标头定义单独的 struct _complex 类型,该类型用于 _cabs 函数。 等效的复数数学函数 cabscabsfcabsl 不使用 struct _complex 类型。

复数常数和宏

I 定义为由 { 0.0f, 1.0f } 初始化的复数类型 _Fcomplex

三角函数

Function 说明
cacoscacosfcacosl 计算复数的复数反余弦值
casincasinfcasinl 计算复数的复数反正弦值
catancatanfcatanl 计算复数的复数反正切值
ccosccosfccosl 计算复数的复数余弦值
csincsinfcsinl 计算复数的复数正弦值
ctanctanfctanl 计算复数的复数正切值

双曲函数

Function 说明
cacoshcacoshfcacoshl 计算复数的复数反双曲余弦值
casinhcasinhfcasinhl 计算复数的复数反双曲正弦值
catanhcatanhfcatanhl 计算复数的复数反双曲正切值
ccoshccoshfccoshl 计算复数的复数双曲余弦值
csinhcsinhfcsinhl 计算复数的复数双曲正弦值
ctanhctanhfctanhl 计算复数的复数双曲正切值

指数和对数函数

函数 说明
cexpcexpfcexpl 计算复数的以 e 为底的复数指数
clogclogfclogl 计算复数的(以 e 为底的)复数自然对数
clog10clog10fclog10l 计算复数的以 10 为底的复数对数

幂和绝对值函数

函数 说明
cabscabsfcabsl 计算复数的复数绝对值(也称为范数、模数或量值)
cpowcpowfcpowl 计算复数幂函数
csqrtcsqrtfcsqrtl 计算复数的复数平方根

操作函数

Function 说明
_Cbuild_FCbuild_LCbuild 从实部和虚部构造复数
cargcargfcargl 计算复数的自变量(也称为相角)
cimagcimagfcimagl 检索复数的虚部
conjconjfconjl 计算复数的复数共轭
cprojcprojfcprojl 计算 Riemann 球体上某个复数的投影
crealcrealfcreall 计算复数的实部
normnormfnorml 计算复数的平方量值

运算函数

由于复数不是 Microsoft 编译器中的本机类型,复数类型上未定义标准的算术运算符。 为方便起见,这些复数数学库函数用于实现用户代码中的复数的有限处理:

函数 说明
_Cmulcc_FCmulcc_LCmulcc 将两个复数相乘
_Cmulcr_FCmulcr_LCmulcr 将复数和浮点数相乘

另请参阅

泛型类型数学
按类别分的通用 C 运行时例程