複數運算
|
若實作定義了巨集常數 |
(自 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 標準將反雙曲函數命名為「複數反雙曲正弦」(complex arc hyperbolic sine) 等,但雙曲函數的反函數應為「區域」(area) 函數。其參數為雙曲扇形的面積,而非弧。正確的名稱應為「複數反雙曲正弦」(complex inverse hyperbolic sine) 等。部分作者使用「複數區域雙曲正弦」(complex area hyperbolic sine) 等名稱。
若複數或虛數的其中一部分為無窮大(即使另一部分為 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++ 文件 關於 複數算術
|