複數運算
如果實現定義了宏常量 |
(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++ 文件 關於 複數運算
|