命名空间
变体
操作

复数算术

来自 cppreference.cn
< 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 _Complex, 和 long double _Complex (参见 _Complex)。当包含头文件 <complex.h> 时,这三种复数类型也可以作为 double complex, float complex, long double complex 访问。

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

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

建议(但非必需)定义了 __STDC_IEC_559_COMPLEX__ 的编译器支持虚数。POSIX 建议检查是否定义了宏 _Imaginary_I 以识别虚数支持。

(自 C99 起)
(直到 C11)

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

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

目录

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

[编辑] 注释

以下函数名 可能会(自 C23 起) 被保留,以便将来添加到 <complex.h>,并且在包含该头文件的程序中不可用: cerf, cerfc, cexp2, cexpm1, clog10, clog1p, clog2, clgamma, ctgamma, 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> 头文件,但它没有将复数实现为原生类型,而是作为 structs,这与标准 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 arithmetic <complex.h> (p: TBD)
  • 7.25 Type-generic math <tgmath.h> (p: TBD)
  • 7.31.1 Complex arithmetic <complex.h> (p: TBD)
  • Annex G (normative) IEC 60559-compatible complex arithmetic (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 arithmetic <complex.h> (p: 136-144)
  • 7.25 Type-generic math <tgmath.h> (p: 272-273)
  • 7.31.1 Complex arithmetic <complex.h> (p: 391)
  • Annex G (normative) IEC 60559-compatible complex arithmetic (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 arithmetic <complex.h> (p: 188-199)
  • 7.25 Type-generic math <tgmath.h> (p: 373-375)
  • 7.31.1 Complex arithmetic <complex.h> (p: 455)
  • Annex G (normative) IEC 60559-compatible complex arithmetic (p: 532-545)
  • C99 标准 (ISO/IEC 9899:1999)
  • 6.10.8/2 __STDC_IEC_559_COMPLEX__ (p: 161)
  • 7.3 Complex arithmetic <complex.h> (p: 170-180)
  • 7.22 Type-generic math <tgmath.h> (p: 335-337)
  • 7.26.1 Complex arithmetic <complex.h> (p: 401)
  • Annex G (informative) IEC 60559-compatible complex arithmetic (p: 467-480)

[编辑] 另请参阅

C++ 文档 关于 复数算术