數學與浮點支援
本文內容
通用 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 而異。
舊的 16 位元版 Microsoft C/C++ 和 Microsoft Visual C++ 支援 long double
類型作為 80 位元精確度浮點資料類型。 在更新版本的 Visual C++ 中,long double
資料類型是與 double
類型相同的 64 位元精確度浮點資料類型。 編譯器會將 long double
和 double
視為不同的類型,但 long double
函式與其 double
對應項目相同。 CRT 提供 long double
版本的數學函式以相容於 ISO C99 原始程式碼,但請注意,二進位表示法可能與其他編譯器不同。
支援的數學與浮點常式
常式
使用
abs
, labs
, llabs
, _abs64
計算任何類型整數的絕對值
acos
, acosf
, acosl
計算反餘弦值
acosh
, acoshf
, acoshl
計算雙曲反餘弦值
asin
, asinf
, asinl
計算反正弦值
asinh
, asinhf
, asinhl
計算雙曲反正弦值
atan
, atanf
, atanl
, atan2
, atan2f
, atan2l
計算反正切值
atanh
, atanhf
, atanhl
計算雙曲反正切值
_atodbl
, _atodbl_l
將地區設定特定的字串轉換為 double
atof
, _atof_l
將字串轉換成 double
_atoflt
, _atoflt_l
, _atoldbl
, _atoldbl_l
將地區設定特定的字串轉換為 float
或 long double
cbrt
, cbrtf
, cbrtl
計算立方根
ceil
, ceilf
, ceill
計算 ceiling
_chgsign
, _chgsignf
, _chgsignl
計算加法反元素
_clear87
, _clearfp
取得及清除浮點狀態暫存器
_control87
, _controlfp
, __control87_2
取得和設定浮點控制字組
_controlfp_s
安全版本的 _controlfp
copysign
, copysignf
, copysignl
, _copysign
, _copysignf
, _copysignl
傳回一個值,具有其中一個引數的大小和另一個引數的正負號
cos
, cosf
, cosl
計算正弦值
cosh
, coshf
, coshl
計算雙曲正弦值
div
, ldiv
, lldiv
計算兩個整數值的商數和餘數
_ecvt
, ecvt
將 double
轉換為字串
_ecvt_s
安全版本的 _ecvt
erf
, erff
, erfl
計算誤差函式
erfc
, erfcf
, erfcl
計算誤差餘函式
exp
, expf
, expl
計算指數 e x
exp2
, exp2f
, exp2l
計算指數 2x
expm1
, expm1f
, expm1l
計算 e x -1
fabs
, fabsf
, fabsl
計算浮點類型的絕對值
_fcvt
, fcvt
將浮點數轉換為字串
_fcvt_s
安全版本的 _fcvt
fdim
, fdimf
, fdiml
判斷兩值之間的正差
feclearexcept
清除指定的浮點例外狀況
fegetenv
儲存目前的浮點環境
fegetexceptflag
取得指定的浮點例外狀況狀態
fegetround
取得浮點進位模式
feholdexcept
設定持續的浮點例外狀況模式
feraiseexcept
引發指定的浮點例外狀況
fesetenv
設定目前的浮點環境
fesetexceptflag
設定指定的浮點狀態旗標
fesetround
設定指定的浮點進位模式
fetestexcept
決定要設定的浮點例外狀況狀態旗標
feupdateenv
先還原浮點環境再引發前一個例外狀況
floor
, floorf
, floorl
計算 floor
fma
, fmaf
, fmal
計算積和熔加
fmax
, fmaxf
, fmaxl
計算引數的上限
fmin
, fminf
, fminl
計算引數的最小值
fmod
, fmodf
, fmodl
計算浮點餘數
_fpclass
, _fpclassf
傳回浮點值的分類
fpclassify
傳回浮點值的分類
_fpieee_flt
設定浮點例外狀況的處理常式
_fpreset
重設浮點環境
frexp
, frexpf
, frexpl
取得浮點數的尾數和指數
_gcvt
, gcvt
將浮點數轉換為字串
_gcvt_s
安全版本的 _gcvt
_get_FMA3_enable
, _set_FMA3_enable
取得或設定在 x64 上使用 FMA3 指令的旗標
hypot
, hypotf
, hypotl
, _hypot
, _hypotf
, _hypotl
計算斜邊
ilogb
, ilogbf
, ilogbl
計算以 2 為底數的整數指數
imaxabs
計算任何類型整數的絕對值
imaxdiv
計算兩個整數值的商數和餘數
isfinite
, _finite
, _finitef
判斷值是否有限
isgreater
, isgreaterequal
, isless
, islessequal
, islessgreater
, isunordered
比較兩個浮點值的順序
isinf
判斷指定的浮點值是否無限
isnan
, _isnan
, _isnanf
測試 NaN 的浮點值
isnormal
測試浮點值是否為有限且為次正規數
_j0
, _j1
, _jn
計算 Bessel 函式
ldexp
, ldexpf
, ldexpl
計算 x*2n
lgamma
, lgammaf
, lgammal
計算 gamma 函式絕對值的自然對數
llrint
, llrintf
, llrintl
將浮點值四捨五入至最 long long
接近的值
llround
, llroundf
, llroundl
將浮點值四捨五入至最 long long
接近的值
log
, logf
, logl
, log10
, log10f
, log10l
計算自然對數或底數為 10 的對數
log1p
, log1pf
, log1pl
計算 1+x 的自然對數
log2
, log2f
, log2l
計算以 2 為底數的對數
logb
, logbf
, logbl
, _logb
, _logbf
傳回浮點值的指數
lrint
, lrintf
, lrintl
將浮點值四捨五入至最 long
接近的值
_lrotl
, _lrotr
將整數值向左或向右旋轉
lround
, lroundf
, lroundl
將浮點值四捨五入至最 long
接近的值
_matherr
預設數學錯誤處理常式
__max
傳回兩個值中較大值的巨集
__min
傳回兩個值中較小值的巨集
modf
, modff
, modfl
將浮點值分割成小數和整數部分
nan
, nanf
, nanl
傳回無訊息 NaN 值
nearbyint
, nearbyintf
, nearbyintl
傳回進位的值
nextafter
, nextafterf
, nextafterl
, _nextafter
, _nextafterf
傳回下一個所能顯示的浮點值
nexttoward
, nexttowardf
, nexttowardl
傳回下一個所能顯示的浮點值
pow
, powf
, powl
傳回 的值 x
y
remainder
, remainderf
, remainderl
計算兩個浮點值商數的餘數
remquo
, remquof
, remquol
計算兩個整數值的餘數
rint
, rintf
, rintl
進位浮點值
_rotl
, _rotl64
, _rotr
, _rotr64
旋轉整數類型的位元
round
, roundf
, roundl
進位浮點值
_scalb
, _scalbf
將引數依 2 的乘冪進位
scalbn
, scalbnf
, scalbnl
, scalbln
, scalblnf
, scalblnl
將浮點數乘以整數乘冪 FLT_RADIX
_set_controlfp
設定浮點控制字組
_set_SSE2_enable
啟用或停用 SSE2 指令
signbit
測試浮點值的正負號位元
sin
, sinf
, sinl
計算正弦值
sinh
, sinhf
, sinhl
計算雙曲正弦值
sqrt
, sqrtf
, sqrtl
計算平方根
_status87
, _statusfp
, _statusfp2
取得浮點狀態字組
strtof
, _strtof_l
將字串轉換成 float
strtold
, _strtold_l
將字串轉換成 long double
tan
, tanf
, tanl
計算正切值
tanh
, tanhf
, tanhl
計算雙曲正切值
tgamma
, tgammaf
, tgammal
計算 gamma 函式
trunc
, truncf
, truncl
截斷小數部分
_wtof
, _wtof_l
將寬字元串轉換成 double
_y0
, _y1
, _yn
計算 Bessel 函式
另請參閱
依類別排序的通用 C 執行階段常式
浮點數基本