C语言 输出INF问题

我的主页: isfantasy.com

本人在编写以下小程序,当输入数据n、m大于65536时,发现无论如何设置sum的数据类型,输出sum的值都为INF:

 

double fun(int n,int m){
  int i;
  double sum = 0;
  for(;n <= m;n++){
    sum += 1.0 / (n * n);
  }
  return sum;
}



int main(){
  int n,m,i;
  int num;
  double f[100];
  int flag = 0;
  num = 1;
  scanf("%d %d",&n,&m);
  while(n != 0 || m != 0){
    f[flag++] = fun(n,m);
    scanf("%d %d",&n,&m);
  }
  for(i = 0;i < flag;i++){
      printf("Case %d: %.5lf\n",num++,f[i]);
  }

  return 0;
}

 


经查阅各种资料,发现INF含义如下:

  1. INF表示超出浮点数表示范围(值溢出);
  2. 当值很大或很小时会输出INF:1.0/0.0,-1.0/0.0,0.0+inf=inf;log(0);
  3. 得到inf时就查看是否有溢出或者除以0;
  4. 可用自定义函数 :
     int isFiniteNumber(double d) {return (d<=DBL_MAX&&d>=-DBL_MAX);}

    来判断d是否为一个finite数;

本题处理方法:

 

double fun(int n,int m){
  int i;
  double sum = 0;
  for(;n <= m;n++){
    sum += 1.0 / n / n;
  }
  return sum;
}

扩展:


         另一个C语言与INF类似的是输出NAN,含义表示对浮点数进行了未定义的操作,例:对负数开方,对负数求对数。可用自定义函数:

int isNumber(double d){return (d==d);}

来判断d是否为nan,若d是nan则返回0,否则返回非零值。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值