分享方式:


C 複雜數學支援

Microsoft C 執行時間連結庫 (CRT) 提供複雜的數學連結庫函式,包括 ISO C99 所需的所有函式。 編譯程式不會直接支援 complex_Complex 關鍵詞,因此Microsoft實作會使用結構類型來表示複數。

實作這些函式可以平衡效能與正確性。 因為產生正確的四捨五入結果可能極為昂貴,所以這些函式會設計成有效率產生最接近正確四捨五入結果的近似值。 在大部分情況下,產生的結果是在正確四捨五入結果的 +/-1 單位內,但可能有較大的不精確性。

複雜數學常式依賴浮點數學程式庫函式來進行實作。 這些函式對於不同的 CPU 架構有不同的實作。 例如,32 位元 x86 CRT 的實作可能和 64 位元 x64 CRT 的實作不同。 此外,某些函式對指定的 CPU 架構可能有多種實作。 在執行階段,會根據 CPU 支援的指令集動態選取最有效率的實作。 例如,在 32 位元 x86 CRT,有些函式同時有 x87 實作和 SSE2 實作。 在支援 SSE2 的 CPU 上執行時,會使用較快的 SSE2 實作。 在不支援 SSE2 的 CPU 上執行時,會使用較慢的 x87 實作。 因為數學程式庫函式的不同實作可能會使用不同的 CPU 指令和不同的演算法來產生結果,所以函式在不同的 CPU 中可能會產生不同的結果。 在大部分情況下,結果位於正確四捨五入結果的 +/-1 ULP 內,但實際結果可能會因 CPU 而異。

在複雜數學中使用的類型

標頭的Microsoft實作 complex.h 會將這些類型定義為 C99 標準原生複雜類型的對等專案:

標準類型 Microsoft 類型
float complexfloat _Complex _Fcomplex
double complexdouble _Complex _Dcomplex
long double complexlong double _Complex _Lcomplex

標頭math.h會定義用於函式的_cabs個別類型struct _complex。 對struct _complex等的複雜數學函cabs式、 、 cabsfcabsl不會使用型別。

複雜常數與巨集

I定義為 由 { 0.0f, 1.0f }初始化的複雜型_Fcomplex別。

三角函式

函式 描述
cacos、 、 cacosfcacosl 計算複數的弧形餘弦函數複數
casin、 、 casinfcasinl 計算複數的弧形正弦函數複數
catan、 、 catanfcatanl 計算複數的弧形正切函數複數
ccos、 、 ccosfccosl 計算複數的餘弦函數複數
csin、 、 csinfcsinl 計算複數的正弦函數複數
ctan、 、 ctanfctanl 計算複數的正切函數複數

雙曲函式

函式 描述
cacosh、 、 cacoshfcacoshl 計算複數的弧形雙曲餘弦函數複數
casinh、 、 casinhfcasinhl 計算複數的弧形雙曲正弦函數複數
catanh、 、 catanhfcatanhl 計算複數的弧形雙曲正切函數複數
ccosh、 、 ccoshfccoshl 計算複數的雙曲餘弦函數複數
csinh、 、 csinhfcsinhl 計算複數的雙曲正弦函數複數
ctanh、 、 ctanhfctanhl 計算複數的雙曲正切函數複數

指數和對數函數

函式 描述
cexp、 、 cexpfcexpl 計算複數之底數為 e 的指數複數
clog、 、 clogfclogl 計算複數的自然 (底數為 e) 對數複數
clog10、 、 clog10fclog10l 計算複數之底數為 10 的對數複數

乘冪與絕對值函數

函式 描述
cabs、 、 cabsfcabsl 計算複數的絕對值複數 (又稱為範數、模數或大小)
cpow、 、 cpowfcpowl 計算複雜電源函式
csqrt、 、 csqrtfcsqrtl 計算複數的平方根複數

操作函數

函式 描述
_Cbuild、 、 _FCbuild_LCbuild 從實部及虛部建構複數
carg、 、 cargfcargl 計算複數的引數 (又稱相角)
cimag、 、 cimagfcimagl 計算複數的虛部
conj、 、 conjfconjl 計算複數的共軛複數
cproj、 、 cprojfcprojl 計算複數在黎曼球面上的投影
creal、 、 crealfcreall 計算複數的實部
norm、 、 normfnorml 計算複數的平方大小

作業函數

由於複數不是Microsoft編譯程式中的原生型別,因此不會在複雜型別上定義標準算術運算符。 為了方便起見,會提供這些複雜數學程式庫函數以在使用者程式碼中進行有限的複數操作:

函式 描述
_Cmulcc、 、 _FCmulcc_LCmulcc 將兩個複數相乘
_Cmulcr、 、 _FCmulcr_LCmulcr 將複數與浮點數相乘

另請參閱

泛型數學
依類別排序的通用 C 執行階段常式