Complex number arithmetic
|
若实现定义了宏常量
|
(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; // 虚数单位平方 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
参考文献
| 扩展内容 |
|---|
|
另请参阅
|
C++ 文档
关于
复数运算
|