共用方式為


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, cacosf, cacosl 計算複數的弧形餘弦函數複數
casin, casinf, casinl 計算複數的弧形正弦函數複數
catan, catanf, catanl 計算複數的弧形正切函數複數
ccos, ccosf, ccosl 計算複數的餘弦函數複數
csin, csinf, csinl 計算複數的正弦函數複數
ctan, ctanf, ctanl 計算複數的正切函數複數

雙曲函式

函式 描述
cacosh, cacoshf, cacoshl 計算複數的弧形雙曲餘弦函數複數
casinh, casinhf, casinhl 計算複數的弧形雙曲正弦函數複數
catanh, catanhf, catanhl 計算複數的弧形雙曲正切函數複數
ccosh, ccoshf, ccoshl 計算複數的雙曲餘弦函數複數
csinh, csinhf, csinhl 計算複數的雙曲正弦函數複數
ctanh, ctanhf, ctanhl 計算複數的雙曲正切函數複數

指數和對數函數

函式 描述
cexp, cexpf, cexpl 計算複數之底數為 e 的指數複數
clog, clogf, clogl 計算複數的自然 (底數為 e) 對數複數
clog10, clog10f, clog10l 計算複數之底數為 10 的對數複數

乘冪與絕對值函數

函式 描述
cabs, cabsf, cabsl 計算複數的絕對值複數 (又稱為範數、模數或大小)
cpow, cpowf, cpowl 計算複雜電源函式
csqrt, csqrtf, csqrtl 計算複數的平方根複數

操作函數

函式 描述
_Cbuild, _FCbuild, _LCbuild 從實部及虛部建構複數
carg, cargf, cargl 計算複數的引數 (又稱相角)
cimag, cimagf, cimagl 計算複數的虛部
conj, conjf, conjl 計算複數的共軛複數
cproj, cprojf, cprojl 計算複數在黎曼球面上的投影
creal, crealf, creall 計算複數的實部
norm, normf, norml 計算複數的平方大小

作業函數

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

函式 描述
_Cmulcc, _FCmulcc, _LCmulcc 將兩個複數相乘
_Cmulcr, _FCmulcr, _LCmulcr 將複數與浮點數相乘

另請參閱

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