hypot()
用来求三角形的斜边长,其原型为:double hypot(double x, double y);
,需要#include <stdio.h>
fabs
函数是求绝对值的函数,函数原型是extern float fabs(float x)
,需要#include <math.h>
对double/float数据,一定要使用fabs函数。如果用了abs,就会出现bug,因为返回是int
- 反正切函数 atan2
atan2
返回给定的 X 及 Y 坐标值的反正切值。反正切的角度值等于 X 轴与通过原点和给定坐标点 (Y坐标, X坐标) 的直线之间的夹角。结果以弧度表示并介于-pi
到pi
之间(不包括-pi
)。 而atan(a/b)
的取值范围介于-pi/2
到pi/2
之间,不包括±pi/2
- std::sin 等三角函数
- std::fmod
计算两个浮点数相除的余数1
2double x = 7.5, y = 2.1;
double result = std::fmod(x, y); // 1.2
floor, ceil, round
std::floor
和 std::ceil
都是对变量进行取整,只不过取整的方向不同。 std::floor
是向下取整数,std::ceil
是向上取整数。
比如输入3.6,前者输出3,后者输出4。但输入3.2,结果不变。
std::round
才是四舍五入
找最大最小
std::min(const T& a, const T& b);
求两个参数的最小值
std::max(const T& a, const T& b);
求两个参数的最大值
以下库函数需要 #include <algorithm>
minmax_element
找出容器中最小和最大元素的迭代器,作为std::pair
返回。时间复杂度为 O(n)
1
2template< class ForwardIt >
std::pair<ForwardIt,ForwardIt> minmax_element( ForwardIt first, ForwardIt last );
1 | std::vector<int> v = { 1, 2, 5, 4, 100, 0, -199, 33 }; |
C++17 增加了min_element
返回迭代器位置, 复杂度为 O(n)
。 max_element
返回迭代器位置,复杂度为 O(n)
1 | std::vector<int> v{3, 1, 4, 1, 5, 9}; |
判断 inf, nan
1 | bool isinf( float arg ); |
numeric_limits
模板类,常用于提供很大很小的极值,需要#include <limits>
1 | cout<<std::numeric_limits<int>::max()<<endl; |
结果1
2
3
42147483647
9223372036854775807
-2147483648
-9223372036854775808