刚刚接触C语言,写了一个用割圆法求圆周率的小程序,但是最大只能割999次,如果输入一个四位数就显示-1.#

[复制链接]
查看11 | 回复3 | 2013-3-6 22:32:40 | 显示全部楼层 |阅读模式
不是你的c的问题,是你的double已经溢出了。double的范围是-2^1024 ~ +2^1024,如果超出这个范围double就会溢出,成为-INF(负无穷大),或者是+INF(正无穷大),对INF运算,结果是IND(未定义),既C标准中未定义的结果。可以分析你的代码:
s=s+a*b*3.0*pow(2,n); 溢出点在pow处,当n = 128时其实已经s的增值已经是0了。但是当n增加到1024时,pow(2,n)已经是+INF了,既无穷大,C标准中,与INF的运算结果是未定义的,所以当你的s + a*b*3.0 +INF时,对INF运算,结果产生了IND。...
回复

使用道具 举报

千问 | 2013-3-6 22:32:40 | 显示全部楼层
//这样的精度已经可以了,没必要再算了,在提高精度就多余了! # include# includeint main(){double a,b,r,s,n; int c;while(scanf("%d",&c)!=EOF) {s=30000*sqrt(3.0); n=...
回复

使用道具 举报

千问 | 2013-3-6 22:32:40 | 显示全部楼层
很多种好好的...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行