复数运算

来自cppreference.com
< c‎ | numeric
若实现定义了宏常量__STDC_NO_COMPLEX__,则头文件<complex.h>、复数类型以及此处列出的所有名称都不会提供。 (C11起)

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

在除复数类型外,还有三种序数类型得到支持:double _Imaginaryfloat _Imaginary以及long double _Imaginary(见_Imaginary)。包含头文件<complex.h>时,三种虚数类型亦可通过double imaginaryfloat imaginary以及long double imaginary来使用。

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

推荐编译器定义__STDC_IEC_559_COMPLEX__,但并不强制要求其支持虚数。POSIX推荐检查是否定义宏_Imaginary_I以标识是否支持虚数。 (C99起)
(C11前)

若定义了__STDC_IEC_559_COMPLEX__,则支持虚数。

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

目录

类型
虚数类型宏
(宏常量) [edit]
复数类型宏
(宏常量) [edit]
虚数常量
虚数单位常量i
(宏常量) [edit]
复数单位常量i
(宏常量) [edit]
(C99)
复数或虚数单位常量i
(宏常量) [edit]
操作
(C11)
(C11)
(C11)
由实部和虚部构建复数
(宏函数) [edit]
(C99)
(C99)
(C99)
计算复数的实部
(函数) [edit]
(C99)
(C99)
(C99)
计算复数的虚部
(函数) [edit]
(C99)
(C99)
(C99)
计算复数的模(绝对值)
(函数) [edit]
(C99)
(C99)
(C99)
计算复数的辐角
(函数) [edit]
(C99)
(C99)
(C99)
计算共轭复数
(函数) [edit]
(C99)
(C99)
(C99)
计算黎曼球上的投影
(函数) [edit]
指数函数
(C99)
(C99)
(C99)
计算复数的e底指数
(函数) [edit]
(C99)
(C99)
(C99)
计算复数的自然对数
(函数) [edit]
幂函数
(C99)
(C99)
(C99)
计算复数幂函数
(函数) [edit]
(C99)
(C99)
(C99)
计算复数平方根
(函数) [edit]
三角函数
(C99)
(C99)
(C99)
计算复数正弦
(函数) [edit]
(C99)
(C99)
(C99)
计算复数余弦
(函数) [edit]
(C99)
(C99)
(C99)
计算复数正切
(函数) [edit]
(C99)
(C99)
(C99)
计算复数反正弦
(函数) [edit]
(C99)
(C99)
(C99)
计算复数反余弦
(函数) [edit]
(C99)
(C99)
(C99)
计算复数反正切
(函数) [edit]
双曲函数
(C99)
(C99)
(C99)
计算复数双曲正弦
(函数) [edit]
(C99)
(C99)
(C99)
计算复数双区余弦
(函数) [edit]
(C99)
(C99)
(C99)
计算复数双曲正切
(函数) [edit]
(C99)
(C99)
(C99)
计算复数反双曲正弦
(函数) [edit]
(C99)
(C99)
(C99)
计算复数反双曲余弦
(函数) [edit]
(C99)
(C99)
(C99)
计算复数反双曲正切
(函数) [edit]

[编辑] 注意

下列函数名为<complex.h>的未来扩充而保留,并且在包含该头文件的程序中不可使用:cerfcerfccexp2cexpm1clog10clog1pclog2clgammactgamma,还有它们带-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

[编辑] 参考

  • 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++文档