C语言 输出INF问题

来源:互联网 发布:中国万网域名申请过程 编辑:程序博客网 时间:2024/05/16 07:04

本人在编写以下小程序,当输入数据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含义如下:

    INF表示超出浮点数表示范围(值溢出);
    当值很大或很小时会输出INF:1.0/0.0,-1.0/0.0,0.0+inf=inf;log(0);
    得到inf时就查看是否有溢出或者除以0;
    可用自定义函数 :
         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,否则返回非零值。

原创粉丝点击