C++ 常用数学函数

前言

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++。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值