math.h

总所周知,最早的函数库几乎完全由计算常用数学函数的函数组成。至于20世纪50年代出现的FORTRAN就是以它的功能Formula Translation(公式转换)的缩写得来。
math.h的每一个函数都能接受定义域内的所有参数值,对于其他所有的参数都报告定义域错误。发生定义域错误时,errno设置为EDOM。如果输入的不是数字,那么函数返回一个表示非数字的特殊编码NaN(即Not a number)。对于一个输入的具体的值,函数产生一个确定的结果。而对于所有的结果的值太小或者太大而不能表示的值,函数报告值域错误。如果函数产生的结果数值太大,那么函数就返回一个表示正无穷大的特殊编码+Inf,或者负无穷大的编码-Inf;如果结果太小而不能表示,就返回0.一般来说,结果不能表示为double类型值时,发生值域错误。如果结果上溢,函数返回宏HUGE_VAL的值,并且errno设置为宏ERANGE,如果结果下溢,函数返回0。对于任何可以表示的结果,函数都尽可能地把精度误差控制在两位以内。最后一点,所有math.h头文件里生命的函数的返回类型和参数值都是double类型,并且中间结果也是用double类型来表示。
接下来是math.h头文件库函数的介绍:

#include <math.h>
double acos(double x);

acos计算x的三角反余弦函数主值。如果参数x不在[-1, +1]范围内,则发生定义域错误。函数返回[0, π]弧度范围内的反余弦值。注意函数acos和asin经常使用同一个内部函数来计算。每一个函数都在给出一个直角三角形的一个条直角边和斜边的前提下计算出它的一个瑞角值。因此,注意acos的参数是一个比例量,因此,最好去调用asin、atan或者atan2。

#include <math.h>
double asin(double x);

asin计算x的三角反正弦函数主值。如果参数不在[-1, +1]范围内,则发生定义域错误。函数返回[-π/2, +π/2]弧度范围内的反正弦值。

#include <math.h>
double atan(double x);

atan计算x的三角反正切函数主值。函数atan返回[-π/2, +π/2]弧度范围内的反正切值。这个函数不是很常用,最好调用atan2。

#include <math.h>
double atan2(double y, double x);

atan2计算y/x的三角反正切函数主值,根据两个参数的符号确定返回值的象限信息。如果两个参数都为0,则发生定义域错误。函数atan2返回y/x的反正切,在[-π, +π]弧度范围内。

#include <math.h>
double cos(double x);

cos计算x(单位为弧度)的余弦值。函数cos返回余弦值。函数cos和sin使用同一个内部函数来计算。每一个函数都能把它们的参数以X轴或者Y轴为中心减小到π弧度的范围。注意,函数可以消除2 * π的倍数,但是参数每增加一个2 * π,cos的结果的精度几乎就会减少3位。如果一个参数足够大,那么这个函数返回的结果可能是没有意义的。

#include <math.h>
double sin(double x);

sin计算x(以弧度为单位)的正弦值。函数sin返回正弦值。

#include <tan.h>
double tan(double x);

tan返回x(以弧度为单位)的正切值。函数返回正切值。

#include <math.h>
double cosh(double x);

cosh计算x的双曲余弦。如果x的数值太大,则发生值域错误。函数cosh返回双曲余弦值。关于双曲余弦:双曲余弦函数是双曲函数的一种。我们知道三角函数分正弦sin、余弦cos、正切tan、余切cot、正割sec、余割csc六种。那么,类似的,双曲函数也分为双曲正弦、双曲余弦、双曲正切、双曲余切、双曲正割、双曲余割六种。双曲余弦函数也是其中一种。双曲余弦函数记作cosh,也可简写为ch。曲余弦函数的定义域为(-Inf, +Inf),值域为[1, +Inf)。x == 0时,函数值最小为1。如图:
cosh和sinh

#include <math.h>
double sinh(double x);

sinh计算x的双曲正弦,如果x的数值太大,发生值域错误。函数sinh返回双曲正弦值。定义域范围(-Inf, +Inf),值域范围(-Inf, +Inf)。

#include <math.h>
double tanh(double x);

tanh计算x的双曲正切。函数tanh返回双曲正切值。双曲正切函数图像如下:
tanh
定义域为(-Inf, +Inf),值域为(-1, +1)。注意只是无限逼近-1或者+1。

#include <math.h>
double exp(double x);

函数exp计算以科学常数e(e = 2.71828…)为底的x的指数函数(即y = e ^ x)。如果x的数值太大,则发生值域错误。函数返回指数函数y的值。如果exp的参数具有y * log(x)的形式,那么就用pow(x, y)代替,后者更精确。

#include <math.h>
double frexp(double value, int *exp);

函数frexp把一个浮点数分为一个规格化小数和一个2的整数幂。它把整数值存储在exp指向的int类型的对象中。函数frexp返回x,使x为[1/2, 1)范围内的double值,或者为0,而且value等于x乘以2的*exp次幂。如果value为0,则结果的两部分都为0。也就是说frexp将一个double值分成两个值乘积的一个表达式。

#include <math.h>
double ldexp(double x, int exp);

函数ldexp计算一个浮点数和2的整数幂的乘积,有可能发生值域错误。函数ldexp返回x乘以2的exp次幂的值。注意,ldexp和frexp是互逆的操作。

#include <math.h>
double log(double x);

函数log计算x的自然对数。如果参数为负,则发生定义域错误;如果参数为0,则发生值域错误。函数log返回自然对数值(ln x)。

#include <math.h>
double log10(double x);

函数log10计算x的以10为底的对数。如果参数为负,则发生定义域错误;如果参数为0,则可能发生值域错误。函数log10返回以10为底的对数。

#include <math.h>
double modf(double value, double *iptr);

函数modf把参数value分成整数部分和小数部分。它们的符号和参数相同。它把整数部分存储在iptr指向的double类型对象中。函数modf返回value的带符号的小数部分。注意这个函数就是将一个double值表示为两数之和的一个表达式。

#include <math.h>
double pow(double x, double y);

函数pow计算x的y次幂。如果x为负值而且y不是一个整数值,则发生定义域错误。当x为0且y小于等于0时,如果结果不能表示,则发生定义域错误。也可能发生值域错误。函数pow返回x的y次幂。当科学常数e是x参数值时,可以用exp(y)代替pow(e, y),exp更精确。使用sqrt(x)代替pow(x, 0.5),用x * x替代pow(x, 2.0)。

#include <math.h>
double sqrt(double x);

函数sqrt计算x的非负平方根。如果参数为负,则发生定义域错误。函数sqrt返回平方根的值。

#include <math.h>
double ceil(double x);

函数ceil计算不小于x的最小整数。函数ceil返回不小于x的最小整数,表示为double类型。使用函数ceil、floor和modf比把浮点数转换成整数类型安全得多,因为它们可以对任意的浮点值进行操作而不会造成溢出。如果想要得到和浮点值x最接近的整数可以写:x < 0.0 ? ceil(x - 0.5) : floor(x + 0.5);

#include <math.h>
double fabs(double x);

函数fabs计算浮点数x的绝对值。函数fabs返回x的绝对值。

#include <math.h>
double floor(double x);

函数floor计算不大于x的最大整数。函数floor返回不大于x的最大整数,表示为double类型。

#include <math.h>
double fmod(double x, double y);

函数计算x/y的浮点余数。对于某个整数值i,函数fmod返回值x - i * y。因此如果y不为0,结果的符号和x相同而且数值上比y小;如果y为0,则或者发生定义域错误,或者函数fmod返回0。
一些补充:
HUGE_VAL——这个宏通常会展开为一个非常大的double常量,一般情况下和float.h中定义的DBL_MAX的展开值相等。在那些对无穷大(Inf)不提供特殊编码的机器上,通常认为返回这样一个大值是警告发生了值域错误的最好方式。将一个数学函数的返回值和HUGE_VAL或者-HUGE_VAL相比较可能会比较安全。

  • 8
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: math.h是C语言中的标准头文件之一,在编写数学相关的程序时经常会用到。为了使用math.h头文件,我们只需在程序中包含这个头文件即可。 要下载math.h头文件,需要安装一个C编译器,比如gcc。对于Windows操作系统,可以下载MinGW或者Cygwin编译器;对于MAC或者Linux操作系统,可以使用预先安装的GCC编译器。 安装好编译器后,我们就可以使用math.h头文件了。在程序中,我们只需要在需要使用数学函数时引入math.h即可。比如,如果我们需要使用sin函数,只需要在程序中包含#include <math.h>,然后就可以调用sin函数进行数学计算了。 需要注意的是,不同的数学函数对应不同的头文件。如果我们只需要使用某个特定的数学函数,可以选择只包含对应的头文件,比如<math.h>中的sin函数对应的头文件是<cmath>。这样可以节省编译时间和内存空间。 总的来说,要下载math.h头文件,我们需要安装一个C编译器,并在程序中包含math.h头文件即可开始使用数学函数。 ### 回答2: math.h是C语言中常用的头文件之一,它提供了一些数学运算的函数原型和宏定义。如果需要使用math.h头文件,可以按照以下步骤进行下载。 首先,在编写C程序之前,确保你已经安装了编译器,如gcc。接下来,打开你的文本编辑器,创建一个新的C源文件,比如"myprogram.c"。 然后,在你的源文件中,添加以下代码行: ```c #include <math.h> ``` 这样就将math.h头文件包含进了你的程序中。 保存并关闭文件。接下来,打开你的终端或命令提示符,并进入到包含你的源文件的目录。 然后,使用以下命令来编译你的程序: ``` gcc -o myprogram myprogram.c -lm ``` 这里的"-lm"选项是为了链接数学库,因为math.h头文件中的函数需要数学库的支持。 如果编译没有错误,你会得到一个可执行文件,比如"myprogram"。最后,运行该文件: ``` ./myprogram ``` 这样,你就成功地使用了math.h头文件的函数。 总结一下,下载math.h头文件的过程就是将其包含进你的C源文件,并使用编译器来编译和链接你的程序。这样,你就可以使用math.h提供的数学函数了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值