csp信奧賽C++常用的數學函數詳解
在信息學奧林匹克競賽(信奧賽)中,C++ 的 <cmath>
頭文件提供了豐富的數學函數,用于高效處理數學運算。以下是常用系統數學函數的詳細講解及匯總表格。
-
絕對值函數
int abs(int x)
:返回整數的絕對值(需包含<cstdlib>
)。double fabs(double x)
:返回浮點數的絕對值。- C++11 后推薦使用
std::abs(x)
,支持重載(如int
,double
)。
-
冪與根
double pow(double base, double exponent)
:計算base
的exponent
次方。double sqrt(double x)
:返回x
的平方根(x ≥ 0
)。double cbrt(double x)
(C++11):返回立方根。
-
取整函數
double ceil(double x)
:向上取整(如ceil(2.3) = 3.0
)。double floor(double x)
:向下取整(如floor(2.7) = 2.0
)。double round(double x)
:四舍五入到最接近的整數(如round(2.5) = 3.0
)。
-
指數與對數
double exp(double x)
:計算e^x
。double log(double x)
:自然對數(x > 0
)。double log10(double x)
:以 10 為底的對數。
-
三角函數(參數為弧度)
double sin(double x)
、double cos(double x)
、double tan(double x)
。- 反三角函數:
asin(x)
、acos(x)
(返回值范圍[-π/2, π/2]
和[0, π]
)。 double atan2(double y, double x)
:計算y/x
的反正切(處理所有象限)。
-
其他函數
double fmod(double x, double y)
:浮點數取模(余數符號同x
)。double hypot(double x, double y)
:計算√(x2 + y2)
。double fmax(double a, double b)
、double fmin(...)
:返回最大/最小值。
匯總表格
函數名 | 功能 | 參數類型 | 返回值類型 | 示例 |
---|---|---|---|---|
abs(int) | 整數絕對值 | int | int | abs(-5) → 5 |
fabs(double) | 浮點數絕對值 | double | double | fabs(-3.5) → 3.5 |
pow(a, b) | 計算 a^b | double , double | double | pow(2, 3) → 8.0 |
sqrt(x) | 平方根 | double | double | sqrt(16) → 4.0 |
ceil(x) | 向上取整 | double | double | ceil(2.3) → 3.0 |
floor(x) | 向下取整 | double | double | floor(2.7) → 2.0 |
round(x) | 四舍五入 | double | double | round(2.5) → 3.0 |
exp(x) | 計算 e^x | double | double | exp(1) → ~2.718 |
log(x) | 自然對數(ln(x) ) | double | double | log(7.389) → ~2.0 |
log10(x) | 以 10 為底的對數 | double | double | log10(100) → 2.0 |
sin(x) | 正弦函數 | double (弧度) | double | sin(π/2) → 1.0 |
atan2(y, x) | 四象限反正切 | double , double | double | atan2(1, 1) → π/4 |
fmod(x, y) | 浮點取模 | double , double | double | fmod(5.5, 2) → 1.5 |
hypot(x, y) | 計算直角斜邊 | double , double | double | hypot(3, 4) → 5.0 |
注意事項
- 類型匹配:如
abs
對整型,fabs
對浮點型,C++11 后可用std::abs
自動匹配。 - 錯誤處理:
sqrt(-1)
返回NaN
,log(0)
返回-inf
。 - 精度問題:浮點運算可能存在精度誤差,比較時建議用極小量(如
1e-9
)。
掌握這些函數能顯著提升算法題的編碼效率,建議結合實踐加深理解。
文末彩蛋:
點擊查看老師的個人主頁,學習csp信奧賽完整系列課程:
https://edu.csdn.net/lecturer/7901