前言
C++提供了很多实用的数学函数,如果要使用先添加头文件<cmath>或<math.h>
#include<cmath>
一、平方、开平方
exp(x); //求常数e的x次方。#define M_E 2.71828182845904523536
pow(x, y); //求x的y次方
sqrt(x); //开平方
二、对数
log(x); //求e为底的对数 ln
log10(x); //求10为底的对数 lg
log(y)/log(x); //求x为底的y的对数
三、绝对值
int abs(x); //整数型的绝对值
double fabs(double x); //浮点型的绝对值
四、取整
ceil(x); //向上取整 返回的是大于或等于x的最小整数
floor(x); //向下取整 返回的是小于或等于x的最大整数
fix(x); //朝零方向取整
round(x); //四舍五入到最近的整数
//使用round保留2位小数
double num = 3.1415926;
double roundedNum = round(num * 100) / 100;
cout << roundedNum << endl; //输出 3.14
五、取余、取小数
m = fmod (x, y); //返回两参数相除的余数
f = modf (x, * iptr); //小数部分返回给f,整数部分的指针指向iptr
f = modf (x, & a); //小数部分返回给f,整数部分为a
六、随机数
r = rand(void); //产生一个0~RAND_MAX之间的随机数。int:32767; unsigned int 双字节是 65535,四字节是 4294967295。
f = rand() / double(RAND_MAX); //0~1 之间的浮点数
r = rand() % 50; //产生一个在[0,50)区间内的随机数
r = a + rand() % (b-a+1); //产生[a,b]区间的随机数
srand(2);
/*rand() 产生的是伪随机数字,每次执行时是相同的(默认seed=1); 若要不同, 用函数 srand() 初始化它。
srand(seed) 用来设置 rand() 产生随机数时的随机数种子。
参数 seed 必须是个整数,如果每次 seed 都设相同值,rand() 所产生的随机数值每次就会一样。*/
//用当前时间戳作为随机数种子,确保真正随机
#include<ctime>
srand((unsigned)time(0)); //用srand( time(0) )实现真正意义上的随机数
七、三角函数、反三角函数
//三角函数
sin(x); //正弦
cos(x); //余弦。cos(π)=-1,故 π = acos(-1)
tan(x); //正切
//反三角函数
asin(x); //反正弦 [−π/2, π/2]
acos(x); //反余弦 [0, π]
atan(x); //反正切(主值) [−π/2, π/2]
atan2(x); //反正切(整圆值) [−π, π]
八、圆周率 π(pi)
// 1、圆周率可用"M_PI"表示(3.14159),需引入文件头<cmath>
// 2、在文件头定义常量PI
# define PI acos(-1.0)
# define PI 2*asin(1.0)
# define PI 4*atan(1.0)
// 3、在程序中声明符号常量pi
const double pi = acos(-1.0); //cos(π)=-1,故 π = acos(-1)
九、最大值max、最小值min
//需导入算法文件头<cmath>
#include<cmath>
//两个数比较
min(a, b, comp); //取最小值,comp为指定的比较规则,可缺省
max(a, b, comp);
//多个数比较,需加 { }
min({a,b,c,d}, comp);
max({a,b,c,d}, comp);
/*用max_element()及min_element()函数,求数组最大值、最小值的下标,
二者返回的都是迭代器或指针。
需导入算法文件头<algorithm>*/
#include<algorithm>
//取普通数组最小值、最大值的下标——无"*"返回的是指针/迭代器
int a[] = {1,2,3,4,5};
int len = sizeof(a)/sizeof(a[0]); //求数组中元素的个数
int len = end(a) - begin(a);
min_element(a, a+len, comp) - a; //数组取最小值对应的下标
max_element(a, a+len, comp) - a;
min_element(begin(a), end(a), comp) - a; //数组取最小值对应的下标
max_element(begin(a), end(a), comp) - a;
//取普通数组最小值、最大值(min_element返回的是指针/迭代器,用 '*' 取值)
*min_element(a, a+5, comp); //数组取最小值
*max_element(a, a+5, comp);
//STL容器取最小值、最大值对应的位置下标
min_element(v.begin(), v.end(), comp) - v.begin(); //数组取最小值对应的位置下标
max_element(v.begin(), v.end(), comp) - v.begin();
//STL容器取最小值、最大值
*min_element(v.begin(), v.end(), comp); //数组取最小值
*max_element(v.begin(), v.end(), comp);
十、直角三角形的斜边长
z = hypot(x, y); //返回直角三角形斜边的长度(z),z^2=x^2+y^2
根据网络资料整理,用于和自家孩子一起自学C++。