我的主页: isfantasy.com
本人在编写以下小程序,当输入数据n、m大于65536时,发现无论如何设置sum的数据类型,输出sum的值都为INF:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25double 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: %.5lfn",num++,f[i]); } return 0; }
经查阅各种资料,发现INF含义如下:
- INF表示超出浮点数表示范围(值溢出);
- 当值很大或很小时会输出INF:1.0/0.0,-1.0/0.0,0.0+inf=inf;log(0);
- 得到inf时就查看是否有溢出或者除以0;
- 可用自定义函数 : 复制代码1
int isFiniteNumber(double d) {return (d<=DBL_MAX&&d>=-DBL_MAX);}
来判断d是否为一个finite数;
本题处理方法:
复制代码
1
2
3
4
5
6
7
8double fun(int n,int m){ int i; double sum = 0; for(;n <= m;n++){ sum += 1.0 / n / n; } return sum; }
扩展:
另一个C语言与INF类似的是输出NAN,含义表示对浮点数进行了未定义的操作,例:对负数开方,对负数求对数。可用自定义函数:复制代码1int isNumber(double d){return (d==d);}
来判断d是否为nan,若d是nan则返回0,否则返回非零值。
最后
以上就是爱笑大门最近收集整理的关于C语言 输出INF问题的全部内容,更多相关C语言内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复