6.5.6 数学函数库

数学函数库提供了多个数学计算的函数,其原型声明包含在头文件math.h中,数学函数库的函数如表6.11所示。下面分别对这些函数进行介绍。

6.5.6 数学函数库 - 图1

1.绝对值函数abs、cabs、fabs和labs

绝对值函数abs、cabs、fabs和labs的函数原型如下。


int abs(int val);

char cabs(char val);

float fabs(float val);

long labs(long val)


绝对值函数abs、cabs、fabs和labs分别用于计算整型、字符型、浮点型以及长整型数据的绝对值。程序示例如下。


include<math.h>//头文件

include<stdio.h>

include<reg51.h>

void main(void)//主函数

{

int a=-17;//声明并初始化变量

char b=-45;

float c=-14.26;

long d=-2345678;

//初始化串口

printf(“abs(%d)=%d\n”,a,abs(a));//调用abs函数

printf(“cabs(%bd)=%bd\n”,b,cabs(b));//调用cabs函数

printf(“fabs(%f)=%f\n”,c,fabs(c));//调用fabs函数

printf(“labs(%ld)=%ld\n”,d,labs(d));//调用labs函数

}


该程序可以在KeilµVision3编译环境中执行,运行的结果如下。


abs(-17)=17

cabs(-45)=45

fabs(-14.260000)=14.260000

labs(-2345678)=2345678


在该程序中,首先定义并初始化变量,接着分别调用abs、cabs、fabs和labs函数求绝对值,并使用printf函数输出结果。

2.指数函数exp

指数函数exp的函数原型如下。


float exp(float x);


指数函数exp用于计算并返回输出浮点数x的指数。程序示例如下。


include<math.h>//头文件

include<stdio.h>

include<reg51.h>

void main(void)//主函数

{

float x=1.5;//声明并初始化变量

//初始化串口

printf(“exp(%f)=%f\n”,x,exp(x));//调用exp函数

}


该程序可以在KeilµVision3编译环境中执行,运行的结果如下。


exp(1.500000)=4.481689


在该程序中,首先定义并初始化变量,接着调用exp函数求值,并打印输出结果。

3.对数函数log和log10

对数函数log和log10的函数原型如下。


float log(float x);

float log10(float x);


其中,log函数用于计算并返回浮点数x的自然对数(自然对数以e为底,e=2.718282),log10函数用于计算并返回浮点数x的以10为底的对数值。程序示例如下。


include<math.h>//头文件

include<stdio.h>

include<reg51.h>

void main(void)//主函数

{

float y=2.718282;

float z=100;

//初始化串口

printf(“log(%f)=%f\n”,y,log(y));//调用log函数

printf(“log10(%f)=%f\n”,z,log10(z));//调用log10函数

}


该程序可以在KeilµVision3编译环境中执行,运行的结果如下。


log(2.718282)=1.000000

log10(100.000000)=2.000000


在该程序中,首先定义并初始化变量,接着分别调用log和log10函数求值,并打印输出结果。

4.平方根函数sqrt

平方根函数sqrt的函数原型如下。


float sqrt(float x);


平方根函数sqrt用于计算并返回浮点数x的平方根。程序示例如下。


include<math.h>//头文件

include<stdio.h>

include<reg51.h>

void main(void)//主函数

{

float z=100;

//初始化串口

printf(“sqrt(%f)=%f\n”,z,sqrt(z));//调用sqrt函数

}


该程序可以在KeilµVision3编译环境中执行,运行的结果如下。


sqrt(100.000000)=10.000000


在该程序中,首先定义并初始化变量,接着调用aqrt函数求值,并打印输出结果。

5.三角函数

在C51语言中,各个三角函数的原型如下。


float cos(float x);

float sin(float x);

float tan(float x);

float acos(float x);

float asin(float x);

float atan(float x);

float atan2(float y,float x);

float cosh(float x);

float sinh(float x);

float tanh(float x);


三角函数用于计算数学中三角函数的值,介绍如下。

❑cos函数用于计算并返回余弦值,变量x的取值范围是-π/2~+π/2。

❑sin函数用于计算并返回正弦值,变量x的取值范围是-π/2~+π/2。

❑tan函数用于计算并返回正切值,变量x的取值范围是-π/2~+π/2。

❑acos函数用于计算并返回反余弦值,其值域为-π/2~+π/2。

❑asin函数用于计算并返回反正弦值,其值域为-π/2~+π/2。

❑atan函数用于计算并返回反正切值,其值域为-π/2~+π/2。

❑atan2函数用于计算并返回y/x的反正切值。

❑cosh函数用于计算并返回双曲余弦值。

❑sinh函数用于计算并返回双曲正弦值。

❑tanh函数用于计算并返回双曲正切值。

这些三角函数的用法类似,这里仅举其中几个进行说明,程序示例如下。


include<math.h>//头文件

include<stdio.h>

include<reg51.h>

const double PI=3.1415926;

void main(void)//主函数

{

float x=PI/4;//声明并初始化变量

float y=0.5;

float z=2;

//初始化串口

printf(“sin(%f)=%f\n”,x,sin(x));//调用sin函数

printf(“asin(%f)=%f\n”,y,asin(y));//调用asin函数

printf(“atan2(%f,%f)=%f\n”,y,z,atan2(y,z));//调用atan2函数

printf(“sinh(%f)=%f\n”,x,sinh(x));//调用sinh函数

}


该程序可以在KeilµVision3编译环境中执行,运行的结果如下。


sin(0.785398)=0.707107

asin(0.500000)=0.523599

atan2(0.500000,2.000000)=0.244979

sinh(0.785398)=0.868671


在该程序中,首先定义并初始化变量,接着分别调用sin、asin、atan2和sinh函数求值,并打印输出结果。

6.取整函数ceil和floor

取整函数ceil和floor的函数原型如下。


float ceil(float x);

float floor(float x);


取整函数用于取输入数据的整数。其中,ceil函数用于计算并返回一个不小于x的最小正整数,而floor函数用于计算并返回一个不大于x的最小正整数。最后的结果为浮点型数据。程序示例如下。


include<math.h>//头文件

include<stdio.h>

include<reg51.h>

void main(void)//主函数

{

float x=12.7;//声明并初始化变量

//初始化串口

printf(“ceil(%f)=%f\n”,x,ceil(x));//调用ceil函数取整

printf(“floor(%f)=%f\n”,x,floor(x));//调用floor函数取整

}


该程序可以在KeilµVision3编译环境中执行,运行的结果如下。


ceil(12.700000)=13.000000

floor(12.700000)=12.000000


在该程序中,首先定义并初始化变量,接着分别调用ceil和floor函数求值并打印输出结果。

7.浮点型分离函数modf

浮点型分离函数modf的函数原型如下。


float modf(float x,float*ip);


浮点型分离函数modf用于将浮点型数据x的整数和小数部分分开,整数部分放入*ip,小数部分作为返回值。分离后的整数部分和小数都含有与x相同的正负符号,程序示例如下。


include<math.h>//头文件

include<stdio.h>

include<reg51.h>

void main(void)//主函数

{

float x=-3.5,y,z;//声明变量

float y,z;//声明变量

//初始化串口

y=modf(x,&z);//调用modf函数

printf(“%f=%f+%f\n”,x,y,z);//输出结果

}


该程序可以在KeilµVision3编译环境中执行,运行的结果如下。


-3.500000=-0.500000+-3.000000


在该程序中,首先定义并初始化变量,接着调用modf函数求解该浮点型数据的整数和小数部分,并打印输出分离后的结果。

8.幂函数pow

幂函数pow函数的原型如下。


float pow(float x,floaty);


幂函数pow用于进行幂指数运算,该函数用于计算并返回xy的值。如果x不等于0而y=0,则返回1;如果x=0且y≤0或x<0且y不是整数时,返回NaN。程序示例如下。


include<math.h>//头文件

include<stdio.h>

include<reg51.h>

void main(void)//主函数

{

float x=2.0;//声明并初始化变量

float y=4.0;

//初始化串口

printf(“%f^%f=%f\n”,x,y,pow(x,y));//调用pow函数

x=-2;

y=0.12;

printf(“%f^%f=%f\n”,x,y,pow(x,y));//调用pow函数

}


该程序可以在KeilµVision3编译环境中执行,运行的结果如下。


2.000000^4.000000=16.000000

-2.000000^0.120000=NaN


在该程序中,首先定义并初始化变量,接着调用pow函数求解幂运算,并打印输出结果。最后,修改变量x和y的值,再次调用pow函数进行运算。