复数算术

来自cppreference.com
< c‎ | numeric

若实现定义了宏常量 __STDC_NO_COMPLEX__ ,则不提供头文件 <complex.h> 、复数类型以及此处列出的所有名称。

(C11 起)

C 编程语言从 C99 开始支持三种内建类型 double _Complexfloat _Complexlong double _Complex 的复数数学运算(见 _Complex )。包含头文件 <complex.h> 时,三种复数类型亦可通过 double complexfloat complexlong double complex 使用。

除了复数类型,还支持三种虚数类型得到支持: double _Imaginaryfloat _Imaginarylong double _Imaginary (见 _Imaginary )。包含头文件 <complex.h> 时,三种虚数类型亦可通过 double imaginaryfloat imaginarylong double imaginary 使用。

标准算术运算符 +, -, *, / 可用于实数、复数及虚数类型的任意混合。

推荐编译器定义 __STDC_IEC_559_COMPLEX__ ,但并不强制要求其支持虚数。 POSIX 推荐检查是否定义宏 _Imaginary_I 以鉴别是否支持虚数。

(C99 起)
(C11 前)

若定义 __STDC_IEC_559_COMPLEX__ ,则支持虚数。

(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)
计算复数反双曲正切
(函数) [编辑]

[编辑] 注意

下列函数名为 <complex.h> 的未来扩充而保留,并且在包含该头文件的程序中不可使用: cerfcerfccexp2cexpm1clog10clog1pclog2clgammactgamma ,还有它们带 -f 及 -l 后缀的变体。

尽管 C 标准以“复弧双曲正弦( complex arc hyperbolic sine )”等名称指名反双曲函数,双曲函数的反函数却是面积函数。它们的参数是双曲扇形的面积,而非弧长。正确名称是“复反双曲正弦”等等。一些作者会使用“复面积双曲正弦( complex area hyperbolic sine )”等名称。

若组分的一部分是无穷大,则复数或虚数为无穷大,即使另一组分是 NaN 。

若双组分都不是无穷大或 NaN ,则复数或虚数是有限的。

若双组分皆为正零或负零,则复数或虚数为零。

某些平台不支持虚数类型,变通方式是使用复数和其实浮点转换类型进行运算。且以下使用的函数如果是 <tgmath.h> 的,会与 <math.h> 产生命名冲突,导致操作系统出现资源占满的死循环现象,建议直接使用来自 <complex.h> 的函数。

[编辑] 示例

#include <stdio.h>
#include <complex.h>
#include <tgmath.h>
 
int main(void)
{
    double complex z1 = I * I;     // 虚数单位平方
    printf("I * I = %.1f%+.1fi\n", creal(z1), cimag(z1));
 
    double complex z2 = pow(I, 2); // 虚数单位平方
    printf("pow(I, 2) = %.1f%+.1fi\n", creal(z2), cimag(z2));
 
    double PI = acos(-1);
    double complex z3 = exp(I * PI); // 欧拉公式
    printf("exp(I*PI) = %.1f%+.1fi\n", creal(z3), cimag(z3));
 
    double complex z4 = 1+2*I, z5 = 1-2*I; // 共轭
    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

[编辑] 引用

  • C11 standard (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.3.1/2 __STDC_NO_COMPLEX__ (p: 188)
  • 7.25 Type-generic math <tgmath.h> (p: 373-375)
  • 7.31.1 Complex arithmetic <complex.h> (p: 455)
  • B.2 Complex <complex.h> (p: 475-477)
  • Annex G (normative) IEC 60559-compatible complex arithmetic (p: 532-545)
  • G.1/1 __STDC_IEC_559_COMPLEX__ (p: 532)
  • C99 standard (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)
  • B.2 Complex <complex.h> (p: 419-420)
  • Annex G (informative) IEC 60559-compatible complex arithmetic (p: 467-480)
  • G.1/1 __STDC_IEC_559_COMPLEX__ (p: 467)

[编辑] 参阅

复数算术C++ 文档