复数运算
如果宏常量 |
(自 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 访问。
标准算术运算符 +, -, *, / 可以与实数、复数和虚数类型以任何组合使用。
建议使用定义了 |
(自 C99 起) (直到 C11) |
如果定义了 |
(自 C11 起) |
在头文件
<complex.h> 中定义 | ||
类型 | ||
(C99) |
虚数类型宏 (关键字宏) | |
(C99) |
复数类型宏 (关键字宏) | |
虚数常量 | ||
(C99) |
虚数单位常量 i (宏常量) | |
(C99) |
复数单位常量 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) |
计算复数的反双曲正切 (函数) |
[编辑] 注释
以下函数名称可能(自 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>
头文件,但它并没有将复数实现为原生类型,而是作为 struct,这与标准 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
- 6.10.8.3/1/2
__STDC_IEC_559_COMPLEX__
(p: TBD)
- 6.10.8.3/1/2
- 7.3 复数运算
<complex.h>
(p: TBD)
- 7.3 复数运算
- 7.25 类型泛型数学
<tgmath.h>
(p: TBD)
- 7.25 类型泛型数学
- 7.31.1 复数运算
<complex.h>
(p: TBD)
- 7.31.1 复数运算
- 附录 G (规范性) 兼容 IEC 60559 的复数运算 (p: TBD)
- C17 标准 (ISO/IEC 9899:2018)
- 6.10.8.3/1/2
__STDC_NO_COMPLEX__
(p: 128)
- 6.10.8.3/1/2
- 6.10.8.3/1/2
__STDC_IEC_559_COMPLEX__
(p: 128)
- 6.10.8.3/1/2
- 7.3 复数运算
<complex.h>
(p: 136-144)
- 7.3 复数运算
- 7.25 类型泛型数学
<tgmath.h>
(p: 272-273)
- 7.25 类型泛型数学
- 7.31.1 复数运算
<complex.h>
(p: 391)
- 7.31.1 复数运算
- 附录 G (规范性) 兼容 IEC 60559 的复数运算 (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
- 6.10.8.3/1/2
__STDC_IEC_559_COMPLEX__
(p: 177)
- 6.10.8.3/1/2
- 7.3 复数运算
<complex.h>
(p: 188-199)
- 7.3 复数运算
- 7.25 类型泛型数学
<tgmath.h>
(p: 373-375)
- 7.25 类型泛型数学
- 7.31.1 复数运算
<complex.h>
(p: 455)
- 7.31.1 复数运算
- 附录 G (规范性) 兼容 IEC 60559 的复数运算 (p: 532-545)
- C99 标准 (ISO/IEC 9899:1999)
- 6.10.8/2
__STDC_IEC_559_COMPLEX__
(p: 161)
- 6.10.8/2
- 7.3 复数运算
<complex.h>
(p: 170-180)
- 7.3 复数运算
- 7.22 类型泛型数学
<tgmath.h>
(p: 335-337)
- 7.22 类型泛型数学
- 7.26.1 复数运算
<complex.h>
(p: 401)
- 7.26.1 复数运算
- 附录 G (信息性) 兼容 IEC 60559 的复数运算 (p: 467-480)
[编辑] 另请参见
C++ 文档 用于 复数运算
|