共用方式為


數學與浮點支援

通用 C 執行時間連結庫 (UCRT) 提供許多整數和浮點數學連結庫函式,包括 ISO C99 所需的所有函式。 實作這些浮點函式可以平衡效能與正確性。 因為產生正確的四捨五入結果可能極為昂貴,所以這些函式會設計成有效率產生最接近正確四捨五入結果的近似值。 在大部分情況下,產生的結果會位於正確四捨五入結果的 +/-1 ULP(最小精確度單位)內,但在某些情況下可能會有較大的不精確性。

針對 ISO C Standard 11 (C11) 和更新版本,標頭 <tgmath.h> 除了包含 <math.h><complex.h>之外,還提供根據參數類型叫用對應數學函式的巨集。 如需詳細資料,請參閱型別泛型數學

許多浮點數學連結庫函式針對不同的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 而異。

較新版本的 UCRT 可能會改善浮點數學連結庫函式的精確度和精確度。 由於 UCRT 是 Windows作系統的一部分,因此您可能會在不同的作系統版本或偵錯和發行組建之間取得這些函式的不同結果。 雖然不建議這麼做,但如果您需要這些函式,您可以在任何地方產生相同的結果,以靜態方式連結至 UCRT,以確保一致的結果。

舊的 16 位元版 Microsoft C/C++ 和 Microsoft Visual C++ 支援 long double 類型作為 80 位元精確度浮點資料類型。 在更新版本的 Visual C++ 中,long double 資料類型是與 double 類型相同的 64 位元精確度浮點資料類型。 編譯器會將 long doubledouble 視為不同的類型,但 long double 函式與其 double 對應項目相同。 CRT 提供 long double 版本的數學函式以相容於 ISO C99 原始程式碼,但請注意,二進位表示法可能與其他編譯器不同。

支援的數學與浮點常式

常式 使用
abs、 、 labsllabs_abs64 計算任何類型整數的絕對值
acos、 、 acosfacosl 計算反餘弦值
acosh、 、 acoshfacoshl 計算雙曲反餘弦值
asin、 、 asinfasinl 計算反正弦值
asinh、 、 asinhfasinhl 計算雙曲反正弦值
atan、、atanfatanlatan2、、atan2fatan2l 計算反正切值
atanh、 、 atanhfatanhl 計算雙曲反正切值
_atodbl_atodbl_l 將地區設定特定的字串轉換為 double
atof_atof_l 將字串轉換成 double
_atoflt、 、 _atoflt_l_atoldbl_atoldbl_l 將地區設定特定的字串轉換為 floatlong double
cbrt、 、 cbrtfcbrtl 計算立方根
ceil、 、 ceilfceill 計算 ceiling
_chgsign、 、 _chgsignf_chgsignl 計算加法反元素
_clear87_clearfp 取得及清除浮點狀態暫存器
_control87、 、 _controlfp__control87_2 取得和設定浮點控制字組
_controlfp_s 安全版本的 _controlfp
copysign、、copysignfcopysignl_copysign、、_copysignf_copysignl 傳回一個值,具有其中一個引數的大小和另一個引數的正負號
cos、 、 cosfcosl 計算正弦值
cosh、 、 coshfcoshl 計算雙曲正弦值
div、 、 ldivlldiv 計算兩個整數值的商數和餘數
_ecvtecvt double 轉換為字串
_ecvt_s 安全版本的 _ecvt
erf、 、 erfferfl 計算誤差函式
erfc、 、 erfcferfcl 計算誤差餘函式
exp、 、 expfexpl 計算指數 ex
exp2、 、 exp2fexp2l 計算指數 2x
expm1、 、 expm1fexpm1l 計算 ex-1
fabs、 、 fabsffabsl 計算浮點類型的絕對值
_fcvtfcvt 將浮點數轉換為字串
_fcvt_s 安全版本的 _fcvt
fdim、 、 fdimffdiml 判斷兩值之間的正差
feclearexcept 清除指定的浮點例外狀況
fegetenv 儲存目前的浮點環境
fegetexceptflag 取得指定的浮點例外狀況狀態
fegetround 取得浮點進位模式
feholdexcept 設定持續的浮點例外狀況模式
feraiseexcept 引發指定的浮點例外狀況
fesetenv 設定目前的浮點環境
fesetexceptflag 設定指定的浮點狀態旗標
fesetround 設定指定的浮點進位模式
fetestexcept 決定要設定的浮點例外狀況狀態旗標
feupdateenv 先還原浮點環境再引發前一個例外狀況
floor、 、 floorffloorl 計算 floor
fma、 、 fmaffmal 計算積和熔加
fmax、 、 fmaxffmaxl 計算引數的上限
fmin、 、 fminffminl 計算自變數的最小值
fmod、 、 fmodffmodl 計算浮點餘數
_fpclass_fpclassf 傳回浮點值的分類
fpclassify 傳回浮點值的分類
_fpieee_flt 設定浮點例外狀況的處理常式
_fpreset 重設浮點環境
frexp、 、 frexpffrexpl 取得浮點數的尾數和指數
_gcvtgcvt 將浮點數轉換為字串
_gcvt_s 安全版本的 _gcvt
_get_FMA3_enable_set_FMA3_enable 取得或設定在 x64 上使用 FMA3 指令的旗標
hypot、、hypotfhypotl_hypot、、_hypotf_hypotl 計算斜邊
ilogb、 、 ilogbfilogbl 計算以 2 為底數的整數指數
imaxabs 計算任何類型整數的絕對值
imaxdiv 計算兩個整數值的商數和餘數
isfinite、 、 _finite_finitef 判斷值是否有限
isgreater、、isgreaterequalislessislessequal、、islessgreaterisunordered 比較兩個浮點值的順序
isinf 判斷指定的浮點值是否無限
isnan、 、 _isnan_isnanf 測試 NaN 的浮點值
isnormal 測試浮點值是否為有限且為次正規數
_j0、 、 _j1_jn 計算 Bessel 函式
ldexp、 、 ldexpfldexpl 計算 x*2n
lgamma、 、 lgammaflgammal 計算 gamma 函式絕對值的自然對數
llrint、 、 llrintfllrintl 將浮點值四捨五入至最 long long 接近的值
llround、 、 llroundfllroundl 將浮點值四捨五入至最 long long 接近的值
log、、logflogllog10、、log10flog10l 計算自然對數或底數為 10 的對數
log1p、 、 log1pflog1pl 計算 1+x 的自然對數
log2、 、 log2flog2l 計算以 2 為底數的對數
logb、、 logbflogbl_logb_logbf 傳回浮點值的指數
lrint、 、 lrintflrintl 將浮點值四捨五入至最 long 接近的值
_lrotl_lrotr 將整數值向左或向右旋轉
lround、 、 lroundflroundl 將浮點值四捨五入至最 long 接近的值
_matherr 預設數學錯誤處理常式
__max 傳回兩個值中較大值的巨集
__min 傳回兩個值中較小值的巨集
modf、 、 modffmodfl 將浮點值分割成小數和整數部分
nan、 、 nanfnanl 傳回無訊息 NaN 值
nearbyint、 、 nearbyintfnearbyintl 傳回進位的值
nextafter、、 nextafterfnextafterl_nextafter_nextafterf 傳回下一個所能顯示的浮點值
nexttoward、 、 nexttowardfnexttowardl 傳回下一個所能顯示的浮點值
pow、 、 powfpowl 傳回的值 xy
remainder、 、 remainderfremainderl 計算兩個浮點值商數的餘數
remquo、 、 remquofremquol 計算兩個整數值的餘數
rint、 、 rintfrintl 進位浮點值
_rotl、 、 _rotl64_rotr_rotr64 旋轉整數類型的位元
round、 、 roundfroundl 進位浮點值
_scalb_scalbf 將引數依 2 的乘冪進位
scalbn、、scalbnfscalbnlscalbln、、scalblnfscalblnl 將浮點數乘以整數乘冪 FLT_RADIX
_set_controlfp 設定浮點控制字組
_set_SSE2_enable 啟用或停用 SSE2 指令
signbit 測試浮點值的正負號位元
sin、 、 sinfsinl 計算正弦值
sinh、 、 sinhfsinhl 計算雙曲正弦值
sqrt、 、 sqrtfsqrtl 計算平方根
_status87、 、 _statusfp_statusfp2 取得浮點狀態字組
strtof_strtof_l 將字串轉換成 float
strtold_strtold_l 將字串轉換成 long double
tan、 、 tanftanl 計算正切值
tanh、 、 tanhftanhl 計算雙曲正切值
tgamma、 、 tgammaftgammal 計算 gamma 函式
trunc、 、 truncftruncl 截斷小數部分
_wtof_wtof_l 將寬字串轉換成 double
_y0、 、 _y1_yn 計算 Bessel 函式

另請參閱

依類別排序的通用 C 執行階段常式
浮點數基本