命名空间
变体
操作

复数运算

来自 cppreference.com
< c‎ | numeric
 
 
 
复数运算
类型和虚数常量
(C99)
(C99)    
(C11)
(C99)
操作
(C99)
(C99)
(C99)
(C99)
(C99)
(C99)
幂和指数函数
(C99)
(C99)
(C99)
(C99)
三角函数
(C99)
(C99)
(C99)
(C99)
(C99)
(C99)
双曲函数
(C99)
(C99)
(C99)
(C99)
(C99)
(C99)
 

如果宏常量 __STDC_NO_COMPLEX__ 由实现定义,则不会提供复数类型、头文件 <complex.h> 以及这里列出的所有名称。

(自 C11 起)

截至 C99,C 编程语言支持使用三种内置类型 double _Complex, float _Complexlong double _Complex 进行复数数学运算(参见 _Complex)。当包含头文件 <complex.h> 时,三种复数类型也可以作为 double complex, float complex, long double complex 访问。

除了复数类型之外,还可能支持三种虚数类型:double _Imaginary, float _Imaginarylong double _Imaginary(参见 _Imaginary)。当包含头文件 <complex.h> 时,三种虚数类型也可以作为 double imaginary, float imaginarylong double imaginary 访问。

标准算术运算符 +, -, *, / 可以与实数、复数和虚数类型以任何组合使用。

建议使用定义了 __STDC_IEC_559_COMPLEX__ 的编译器,但它并非支持虚数的必要条件。POSIX 建议检查宏 _Imaginary_I 是否已定义,以确定是否支持虚数。

(自 C99 起)
(直到 C11)

如果定义了 __STDC_IEC_559_COMPLEX__ __STDC_IEC_60559_COMPLEX__(自 C23 起),则支持虚数。

(自 C11 起)
在头文件 <complex.h> 中定义

内容

类型
虚数类型宏
(关键字宏) [编辑]
复数类型宏
(关键字宏) [编辑]
虚数常量
虚数单位常量 i
(宏常量) [编辑]
复数单位常量 i
(宏常量) [编辑]
(C99)
复数或虚数单位常量 i
(宏常量) [编辑]
操作
(C11)(C11)(C11)
从实部和虚部构造复数
(函数宏) [编辑]
(C99)(C99)(C99)
计算复数的实部
(函数) [编辑]
(C99)(C99)(C99)
计算复数的虚部
(函数) [编辑]
(C99)(C99)(C99)
计算复数的幅值
(函数) [编辑]
(C99)(C99)(C99)
计算复数的相角
(函数) [编辑]
(C99)(C99)(C99)
计算复数的共轭
(函数) [编辑]
(C99)(C99)(C99)
计算黎曼球面上的投影
(函数) [编辑]
指数函数
(C99)(C99)(C99)
计算复数的以 e 为底的指数
(函数) [编辑]
(C99)(C99)(C99)
计算复数的自然对数
(函数) [编辑]
幂函数
(C99)(C99)(C99)
计算复数的幂函数
(函数) [编辑]
(C99)(C99)(C99)
计算复数的平方根
(函数) [编辑]
三角函数
(C99)(C99)(C99)
计算复数的正弦
(函数) [编辑]
(C99)(C99)(C99)
计算复数的余弦
(函数) [编辑]
(C99)(C99)(C99)
计算复数的正切
(函数) [编辑]
(C99)(C99)(C99)
计算复数的反正弦
(函数) [编辑]
(C99)(C99)(C99)
计算复数的反余弦
(函数) [编辑]
(C99)(C99)(C99)
计算复数的反正切
(函数) [编辑]
双曲函数
(C99)(C99)(C99)
计算复数的双曲正弦
(函数) [编辑]
(C99)(C99)(C99)
计算复数的双曲余弦
(函数) [编辑]
(C99)(C99)(C99)
计算复数的双曲正切
(函数) [编辑]
(C99)(C99)(C99)
计算复数的反双曲正弦
(函数) [编辑]
(C99)(C99)(C99)
计算复数的反双曲余弦
(函数) [编辑]
(C99)(C99)(C99)
计算复数的反双曲正切
(函数) [编辑]

[编辑] 注释

以下函数名称可能(自 C23 起)为将来添加到 complex.h 的保留名称,不能在包含该头文件的程序中使用:cerfcerfccexp2cexpm1clog10clog1pclog2clgammactgamma, csinpi, ccospi, ctanpi, casinpi, cacospi, catanpi, ccompoundn, cpown, cpowr, crootn, crsqrt, cexp10m1, cexp10, cexp2m1, clog10p1, clog2p1, clogp1(自 C23 起),以及它们的 -f 和 -l 后缀变体。

虽然 C 标准将反双曲函数命名为“复数反双曲正弦”等,但双曲函数的反函数是面积函数。它们的实参是双曲扇形的面积,而不是弧长。正确的名称应为“复数逆双曲正弦”等。一些作者使用“复数面积双曲正弦”等。

如果复数或虚数的某一部分是无穷大,即使另一部分是 NaN,它也是无穷大。

如果复数或虚数的两个部分既不是无穷大也不是 NaN,则它是有限的。

如果复数或虚数的两个部分都是正零或负零,则它是零。

虽然 MSVC 提供了 <complex.h> 头文件,但它并没有将复数实现为原生类型,而是作为 struct,这与标准 C 复数类型不兼容,并且不支持 +-*/ 运算符。

[编辑] 示例

#include <complex.h>
#include <stdio.h>
#include <tgmath.h>
 
int main(void)
{
    double complex z1 = I * I;     // imaginary unit squared
    printf("I * I = %.1f%+.1fi\n", creal(z1), cimag(z1));
 
    double complex z2 = pow(I, 2); // imaginary unit squared
    printf("pow(I, 2) = %.1f%+.1fi\n", creal(z2), cimag(z2));
 
    double PI = acos(-1);
    double complex z3 = exp(I * PI); // Euler's formula
    printf("exp(I*PI) = %.1f%+.1fi\n", creal(z3), cimag(z3));
 
    double complex z4 = 1 + 2 * I, z5 = 1 - 2 * I; // conjugates
    printf("(1+2i)*(1-2i) = %.1f%+.1fi\n", creal(z4 * z5), cimag(z4 * z5));
}

输出

I * I = -1.0+0.0i
pow(I, 2) = -1.0+0.0i
exp(I*PI) = -1.0+0.0i
(1+2i)*(1-2i) = 5.0+0.0i

[编辑] 参考文献

  • C23 标准 (ISO/IEC 9899:2024)
  • 6.10.8.3/1/2 __STDC_NO_COMPLEX__ (p: TBD)
  • 6.10.8.3/1/2 __STDC_IEC_559_COMPLEX__ (p: TBD)
  • 7.3 复数运算 <complex.h> (p: TBD)
  • 7.25 类型泛型数学 <tgmath.h> (p: TBD)
  • 7.31.1 复数运算 <complex.h> (p: TBD)
  • 附录 G (规范性) 兼容 IEC 60559 的复数运算 (p: TBD)
  • C17 标准 (ISO/IEC 9899:2018)
  • 6.10.8.3/1/2 __STDC_NO_COMPLEX__ (p: 128)
  • 6.10.8.3/1/2 __STDC_IEC_559_COMPLEX__ (p: 128)
  • 7.3 复数运算 <complex.h> (p: 136-144)
  • 7.25 类型泛型数学 <tgmath.h> (p: 272-273)
  • 7.31.1 复数运算 <complex.h> (p: 391)
  • 附录 G (规范性) 兼容 IEC 60559 的复数运算 (p: 469-479)
  • C11 标准 (ISO/IEC 9899:2011)
  • 6.10.8.3/1/2 __STDC_NO_COMPLEX__ (p: 177)
  • 6.10.8.3/1/2 __STDC_IEC_559_COMPLEX__ (p: 177)
  • 7.3 复数运算 <complex.h> (p: 188-199)
  • 7.25 类型泛型数学 <tgmath.h> (p: 373-375)
  • 7.31.1 复数运算 <complex.h> (p: 455)
  • 附录 G (规范性) 兼容 IEC 60559 的复数运算 (p: 532-545)
  • C99 标准 (ISO/IEC 9899:1999)
  • 6.10.8/2 __STDC_IEC_559_COMPLEX__ (p: 161)
  • 7.3 复数运算 <complex.h> (p: 170-180)
  • 7.22 类型泛型数学 <tgmath.h> (p: 335-337)
  • 7.26.1 复数运算 <complex.h> (p: 401)
  • 附录 G (信息性) 兼容 IEC 60559 的复数运算 (p: 467-480)

[编辑] 另请参见

C++ 文档 用于 复数运算