首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C標準庫參考指南(7):math.h 數學函數完整手冊與定義域值域速查表

     編輯:關於C語言

前言:math.h——浮點數學的標準工具箱

math.h 提供三角、指數、對數、冪、雙曲、取整、絕對值、餘數等標準數學函數,全部基於 double 精度。本文系統整理所有函數原型、定義域/值域、錯誤處理機制 (errno, EDOM, ERANGE, HUGE_VAL)、特殊情況速查表,構建開發時的桌面速查手冊。

一、 錯誤處理統一機制

  • 定義域錯誤:參數超出定義域 → errno = EDOM,返回值實現定義。
  • 值域錯誤 (溢出):結果超出 double 範圍 → 返回 HUGE_VAL,errno = ERANGE。
  • 下溢:結果太小不可表示 → 返回 0,errno 是否置 ERANGE 實現定義。
  • errno, EDOM, ERANGE 定義於 errno.h。

二、 三角函數 (弧度制)

函數原型定義域值域說明
acosdouble acos(double x)[-1, 1][0, π]反余弦
asindouble asin(double x)[-1, 1][-π/2, π/2]反正弦
atandouble atan(double x)ℝ[-π/2, π/2]反正切
atan2double atan2(double y, double x)y,x 不全為 0[-π, π]象限正確的反正切 (y/x)
cosdouble cos(double x)ℝ[-1, 1]余弦
coshdouble cosh(double x)ℝ[1, ∞)雙曲余弦
sindouble sin(double x)ℝ[-1, 1]正弦
sinhdouble sinh(double x)ℝℝ雙曲正弦
tandouble tan(double x)x ≠ π/2 + kπℝ正切
tanhdouble tanh(double x)ℝ[-1, 1]雙曲正切

三、 指數、對數、冪函數

函數原型定義域值域說明
expdouble exp(double x)ℝ(0, ∞)e^x
frexpdouble frexp(double x, int *exp)ℝ[0.5, 1) 或 0分解尾數/指數:x = 尾數 * 2^exp
ldexpdouble ldexp(double x, int exp)ℝℝx * 2^exp (反 frexp)
logdouble log(double x)(0, ∞)ℝ自然對數 ln(x)
log10double log10(double x)(0, ∞)ℝ常用對數 log10(x)
modfdouble modf(double x, double *iptr)ℝ[0, 1) 或 (-1, 0]分解小數/整數部分,*iptr=整數
powdouble pow(double x, double y)見說明ℝx^y。y∈(0,1)→x≥0;y≤0→x≠0
sqrtdouble sqrt(double x)[0, ∞)[0, ∞)算術平方根

四、 其他數學函數

函數原型定義域值域說明
ceildouble ceil(double x)ℝℤ (≥ x)向上取整
fabsdouble fabs(double x)ℝ[0, ∞)絕對值
floordouble floor(double x)ℝℤ (≤ x)向下取整
fmoddouble fmod(double x, double y)y ≠ 0[-|y|, |y|]餘數:x - n*y (n 為截斷商)

五、 速查卡片:常見特殊值行為

  • sqrt(-1) → EDOM,返回實現定義 (通常 NaN)。
  • log(0) → ERANGE,返回 -HUGE_VAL。
  • pow(0, 0) → 定義域錯誤 (實現定義,C99 規定返回 1)。
  • fmod(x, 0) → EDOM。
  • HUGE_VAL:表示 +∞ 的 double 值 (通常 DBL_MAX 或 INFINITY)。

六、 C99/C11 新增函數 (補充)

  • float/double/long double 重載族:sinf, sinl, expf, expl...。
  • fma, fmax, fmin, fdim, nan, nearbyint, round, trunc, remquo, copysign, nextafter, scalbn, ilogb, log1p, expm1, hypot, cbrt, tgamma, lgamma, erf, erfc...。
  • FP_FAST_FMA 等宏指示硬件加速支持。

七、 總結

math.h 函數語義清晰,核心在於**記住定義域邊界 (log/sqrt/asin/acos 參數範圍)** 與 **錯誤碼檢查模式 (調用後檢 errno)**。嵌入式/無標準庫環境可用查表法/多項式近似/牛頓迭代替代。科學計算關鍵路徑建議啟用 -ffast-math (違反 IEEE 754 但極快) 或使用 libmvec 向量化數學庫。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved