c语言isfinite_[记] C语言中的nan和inf

引言

在数据处理输入输出时,可能遇到数据读入空值(极大、极小)、运算中分母为0或0.0,对0取对数等操作。将产生nan或inf 。

NAN的产生原因

nan:not a number, 表示 “无效数字”

对负数开方,

对负数求对数

0.0*inf

inf/inf

inf-inf

注意:nan是无序的(unordered), 无法对其进行逻辑运算。他不大于,小于或者等于任何数(包括自己),将< > <= >= 作用于nan产生一个exception. 得到nan时就查看是否有非法操作,如果表达式中含有nan, 那么表达式的结果为nan。

INF的产生原因

INF:infinite,表示“无穷大”

超出浮点数的表示范围(溢出)

1.0/0.0 = inf

-1.0/0.0 = inf

0.0+inf = inf

log(0)

注意: 得到inf时就看是否有溢出或者除以0。inf在C语言表达式中就表示数学里无限的概念,如: 1.0/inf等于0.0 ,并可以与其它浮点数进行比较(可以参与<= , >+, ==, != 等运算)

nan和inf的判断

#include

int isfinite(x); // 判断x是否有限,是返回1, 其他返回0;

int isnormal(x); // 判断x是否为一个数(非inf或nan)是返回1, 其他返回0;

int isnan(x); // 当x为nan时返回1,其他返回0;

int isinf(x); // 当x是正无穷时返回1,负无穷时返回-1,其他返回0

例子 nan

#include

#include

int main()

{

printf("isnan(0.0) : %d\n", isnan(0.0));

printf("isnan(1.0/0.0) : %d\n", isnan(1.0/0.0));

printf("isnan(-1.0/0.0) : %d\n", isnan(1.0/0.0));

printf("isnan(sqrt(-1.0)) : %d\n", isnan(sqrt(-1.0)) );

return 0;

}

输出:

isnan(0.0) : 0

isnan(1.0/0.0) : 0

isnan(-1.0/0.0) : 0

isnan(sqrt(-1.0)) : 1

例子 inf

#include

#include

int main()

{

printf("isinf(0.0) : %d\n", isinf(0.0));

printf("isinf(1.0/0.0) : %d\n", isinf(1.0/0.0));

printf("isinf(-1.0/0.0) : %d\n", isinf(1.0/0.0));

printf("isinf(sqrt(-1.0)) : %d\n", isinf(sqrt(-1.0)) );

return 0;

}

输出:

isinf(0.0) : 0

isinf(1.0/0.0) : 1

isinf(-1.0/0.0) : 1

isinf(sqrt(-1.0)) : 0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值