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 说明
.- . 计算复数的复数反余弦值
.- . 计算复数的复数反正弦值
.- . 计算复数的复数反正切值
.- . 计算复数的复数余弦值
.- . 计算复数的复数正弦值
.- . 计算复数的复数正切值

双曲函数

Function 说明
.- . 计算复数的复数反双曲余弦值
.- . 计算复数的复数反双曲正弦值
.- . 计算复数的复数反双曲正切值
.- . 计算复数的复数双曲余弦值
.- . 计算复数的复数双曲正弦值
.- . 计算复数的复数双曲正切值

指数和对数函数

函数 说明
.- . 计算复数的以 e 为底的复数指数
.- . 计算复数的(以 e 为底的)复数自然对数
.- . 计算复数的以 10 为底的复数对数

幂和绝对值函数

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

操作函数

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

运算函数

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

函数 说明
.- . 将两个复数相乘
.- . 将复数和浮点数相乘

另请参阅

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