Linux下C库学习 - math.h

本文介绍了C语言中的math.h库,包括数学函数的使用限制,如除0错误、负数开方等导致的NaN和Inf情况。文章详细解释了如何通过宏判断这些异常,并列举了库中提供的数学函数,如三角函数、指数和对数等。同时,提到了在使用math.h时可能出现的编译错误和解决办法,如链接math库。
摘要由CSDN通过智能技术生成

math.h

众所周知,如果你想使用一些数学函数,那么就需要包含math.h,这里面基本包含了所有常用的数学函数(sin,cos,tan),以及数学常量(PI),等等,既然C库里面开发好了,那我们就看看到底里面都有什么。

既然是数学函数库,首先我们就需要对操作数进行限制,比如0不能作为除数,对负数开方,对负数求对数等等,这些在数学上本身就是不合理的,那如果让计算机去处理这些计算,很可能就会引起错误,因此我们首先就需要明确两个概念inf(infinity)nan(not a number)

  • inf
    infinity字面意思是无穷大,这里主要表示数值超过了浮点数的表示范围溢出

  • nan
    not a number字面意思是不是个数字,这就比较奇怪了,难道我用math.h不是为了操作数字吗?其实这里的意思主要是说你进行了未定义的操作,比如上面说的用0作为除数,对负数开方等等

当然这里还有更严格的限制,比如

1、nan == nan 结果是0或false,即不能和nan进行比较,和nan进行比较得到的结果总是false或0。
2、1.0 / 0.0等于inf,-1.0/0.0等于-inf即0.0 + inf = inf。
3、对负数开方sqrt(-1.0)、对负数求对数(log(-1.0))、0.0 / 0.0、0.0 * inf、inf / inf、inf - inf这些操作都会得到nan,但是不同的是0 / 0会产生操作异常而0.0 / 0.0不会产生操作异常,而是会得到nan
4、1.0/inf等于0.0。
5、inf是可以与其他浮点数进行比较的,即可以参与<=、>+、==、!=等运算。

既然有这么多限制,为了方便我们使用,math.h中提供了一系列宏和函数让你可以判断你进行的操作是否是inf,nan或者其他

具体的函数有如下几个

int fpclassify(x);
/* 用来查看浮点数x的情况,fpclassify可以用任何浮点数表达式作为参数。 */

int isfinite(x);
/* 当(fpclassify(x) != FP_NAN && fpclassify(x) != FP_INFINITE)时,此宏得到一个非零值。 */

int isnormal(x);
/* 当(fpclassify(x) == FP_NORMAL)时,此宏得到一个非零值。 */

int isnan(x);
/* 当(fpclassify(x)==FP_NAN)时,此宏返回一个非零值。 */

int isinf(x);
/* 当x是正无穷是返回1,当x是负无穷时返回-1。 */

这些函数的返回值可以用下面这几个宏来表示

FP_NAN: x是一

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值