复数算术

来自cppreference.com
< c‎ | numeric


 
 
 
复数算术
类型与虚数常量
(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 起)

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,则复数或虚数是有限的。

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

示例

#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

引用

  • 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 页)

参阅