复数算术

来自cppreference.com


若实现定义了宏常量 __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__ __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)
计算复数反双曲正切
(函数) [编辑]

注解

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

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

若两部之一是无穷大,则复数或虚数为无穷大,即使另一部分是 NaN 也是如此。

若两部都不是无穷大或 NaN,则复数或虚数是有限的。

若两部皆为正零或负零,则复数或虚数为零。

尽管 MSVC 确实提供了 <complex.h> 标头,但它并未将复数实现为本机类型,而是实现为 struct,这与标准 C 复数类型不兼容,且不支持 +-*/ 等运算符。

示例

#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

引用

延伸内容
  • C23 标准(ISO/IEC 9899:2024):
  • 6.10.8.3/1/2 __STDC_NO_COMPLEX__ (第 TBD 页)
  • 6.10.8.3/1/2 __STDC_IEC_559_COMPLEX__ (第 TBD 页)
  • 7.3 Complex arithmetic <complex.h> (第 TBD 页)
  • 7.25 Type-generic math <tgmath.h> (第 TBD 页)
  • 7.31.1 Complex arithmetic <complex.h> (第 TBD 页)
  • Annex G (normative) IEC 60559-compatible complex arithmetic (第 TBD 页)
  • C17 标准(ISO/IEC 9899:2018):
  • 6.10.8.3/1/2 __STDC_NO_COMPLEX__ (第 128 页)
  • 6.10.8.3/1/2 __STDC_IEC_559_COMPLEX__ (第 128 页)
  • 7.3 Complex arithmetic <complex.h> (第 136-144 页)
  • 7.25 Type-generic math <tgmath.h> (第 272-273 页)
  • 7.31.1 Complex arithmetic <complex.h> (第 391 页)
  • Annex G (normative) IEC 60559-compatible complex arithmetic (第 469-479 页)
  • C11 标准(ISO/IEC 9899:2011):
  • 6.10.8.3/1/2 __STDC_NO_COMPLEX__ (第 177 页)
  • 6.10.8.3/1/2 __STDC_IEC_559_COMPLEX__ (第 177 页)
  • 7.3 Complex arithmetic <complex.h> (第 188-199 页)
  • 7.25 Type-generic math <tgmath.h> (第 373-375 页)
  • 7.31.1 Complex arithmetic <complex.h> (第 455 页)
  • Annex G (normative) IEC 60559-compatible complex arithmetic (第 532-545 页)
  • C99 标准(ISO/IEC 9899:1999):
  • 6.10.8/2 __STDC_IEC_559_COMPLEX__ (第 161 页)
  • 7.3 Complex arithmetic <complex.h> (第 170-180 页)
  • 7.22 Type-generic math <tgmath.h> (第 335-337 页)
  • 7.26.1 Complex arithmetic <complex.h> (第 401 页)
  • Annex G (informative) IEC 60559-compatible complex arithmetic (第 467-480 页)

参阅

复数算术C++ 文档