复数运算
如果实现定义了宏常量 |
(C11 起) |
C 编程语言,从 C99 开始,通过三个内置类型 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
[编辑] 参考文献
扩展内容 |
---|
|
[编辑] 另请参阅
C++ 文档 关于 复数运算
|