复数算术
如果宏常量 |
(自 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) |
虚数类型宏 (keyword macro) | |
(C99) |
复数类型宏 (keyword macro) | |
虚数常量 | ||
(C99) |
虚数单位常量 i (macro constant) | |
(C99) |
复数单位常量 i (macro constant) | |
(C99) |
复数或虚数单位常量 i (macro constant) | |
操作 | ||
(C11)(C11)(C11) |
从实部和虚部构造一个复数 (function macro) | |
(C99)(C99)(C99) |
计算复数的实部 (function) | |
(C99)(C99)(C99) |
计算复数的虚部 (function) | |
(C99)(C99)(C99) |
计算复数的模 (function) | |
(C99)(C99)(C99) |
计算复数的相位角 (function) | |
(C99)(C99)(C99) |
计算复共轭 (function) | |
(C99)(C99)(C99) |
计算在黎曼球面上的投影 (function) | |
指数函数 | ||
(C99)(C99)(C99) |
计算复数以 e 为底的指数 (function) | |
(C99)(C99)(C99) |
计算复数自然对数 (function) | |
幂函数 | ||
(C99)(C99)(C99) |
计算复数幂函数 (function) | |
(C99)(C99)(C99) |
计算复数平方根 (function) | |
三角函数 | ||
(C99)(C99)(C99) |
计算复正弦 (function) | |
(C99)(C99)(C99) |
计算复余弦 (function) | |
(C99)(C99)(C99) |
计算复正切 (function) | |
(C99)(C99)(C99) |
计算复反正弦 (function) | |
(C99)(C99)(C99) |
计算复反余弦 (function) | |
(C99)(C99)(C99) |
计算复反正切 (function) | |
双曲函数 | ||
(C99)(C99)(C99) |
计算复双曲正弦 (function) | |
(C99)(C99)(C99) |
计算复双曲余弦 (function) | |
(C99)(C99)(C99) |
计算复双曲正切 (function) | |
(C99)(C99)(C99) |
计算复反双曲正弦 (function) | |
(C99)(C99)(C99) |
计算复反双曲余弦 (function) | |
(C99)(C99)(C99) |
计算复反双曲正切 (function) |
[编辑] 注释
以下函数名 可能会(自 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>
头文件,但它没有将复数实现为原生类型,而是作为 structs,这与标准 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
[编辑] 参考
扩展内容 |
---|
|
[编辑] 另请参阅
C++ 文档 关于 复数算术
|