c语言程序运行结果为什么出现1.#INF00?

程序已经运行成功了,这个是什么意思啊?为什么会出现这种个情况,怎么能改能输出正常的数字结果啊求高人指点啊#include"stdio.h"#include"math.h"... 程序已经运行成功了 ,这个是什么意思啊?为什么会出现这种个情况,怎么能改能输出正常的数字结果啊 求高人指点啊
#include "stdio.h"
#include "math.h"
void main()
{double p1=420.3,a,D3=114,p=60000.0,b=1.0,M=8900,T0=20,T1=19.7,f1=350,c,n,u=1325.97,v=149,r=489.31,f2=470.76,l=900,z1=210.5,z2=192.6;
double p2,p3,x1,D0,R,k,smin,s[6]={0,0,0,0,0,0},y[6]={0,0,0,0,0,0};
int i;
R=(u*D3)/v;
printf("%f\n",R);
printf("请输入c,n的值");
scanf("%f,%f",&c,&n);
for(i=0;i<6;i++)
{a=0.05+i*0.01;
p2=a*p1*600;
p3=(p1+p2)/2;
if(p3>0.4*p)
break;
x1=(p3*D3)/(2*p*b-p3);
D0=D3+2*x1;
k=(M*r*4)/(3.14*pow(D0,2)*fabs(T0-T1));
y[i]=f1/k-f1*(D0+2*x1)/(c*f2*pow(R,n));
s[i]=(pow((0.5*D0+y[i]),2)-pow((0.5*D0),2))*3.14*l*z1+(pow((0.5*D3+x1),2)-pow((0.5*D3),2))*3.14*l*z2;
}
smin=s[0];
for(i=1;i<6;i++)
{if(s[i]<s[0]&&s[i]>0)
smin=s[i];
}
printf("最小值smin=%lf",smin);
}
运行成功了 但怎么出现1.#INF00啊 高人帮我修改一下吧 定义初值的数可以改变的。我把我所有的分都给你了 呵呵

还是不行啊 高人运行一下啊 帮我改改啊 还是那个结果啊
展开
 我来答
爱教育爱学习
高粉答主

2019-11-21 · 学而不思则罔,思而不学则殆
爱教育爱学习
采纳数:384 获赞数:112720

向TA提问 私信TA
展开全部

是因为运算结果溢出。

解决办法,例:

chara=126,则a+45=126+45=172-256=-85

uchara=2,则a-100=-98+256=158

a,b基本类型相同时,有符号与无符号数的转换:

无符号a-->有符号b

if(a<max_count/2)b=a

elseb=a-[max_count]

有符号数a-->无符号数b

if(a>0)b=a

elseb=a+[max_count]

例1chara=-119;ucharb=a;则b=-119+256=137

例2uchara=137;charb=a;则b=137-256=-119

例3signedcharchr=127;

intsum=127;

chr+=10;

sum+=chr;

sum值是

思路先把chr当成无符号数,chr+=10变成137然后把chr转化为有符号数137-256=-119-119+sum(127)=8

扩展资料

溢出的原因,考虑两个非负整数x和y,满足0<=x,y<=(2^w)-1。xy可以被表示为w位无符号数字,然而考虑它们的和的话,我们可以得到0<=x+y<=2^(w+1)-2。这个和需要w+1位来表示。如果再用其他数加上这个结果的话,可能又将需要w+2,w+3位来表示新的结果。

这种持续的“字长膨胀“意味着,如果想要完整地表示算数运算的结果,就不能对字长做任何限制(实际上Lisp就是这样干的)。如果限制了数据类型的字长,溢出的发生是不可避免的。由于溢出后的结果往往不是想要的结果,必须对溢出时的情形另做处理,但在此之前我们必须得先能够判断什么时候发生了溢出。

无符号整数的溢出判断比较简单:对一个字长w的无符号数加法运算,当x+y>=2^w时,第w+1位被程序舍去,相当于在x+y的和的基础上减去了2^w。由于x,y<=(2^w)-1,所以有x+y<x(或者x+y<y)。

intuadd_ok(unsignedx,unsignedy){

unsignedsum=x+y;

returnsum>=x;

}

伍拾步
推荐于2017-11-23 · TA获得超过8199个赞
知道大有可为答主
回答量:1852
采纳率:100%
帮助的人:1907万
展开全部
当你输入的c,n值过大的时候,运算结果就会溢出(数据过大或过小超过计算机所能存储的值。。。),就出现你说的那种情况了
你用0.5,0.2试试。。。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
一起听风赏雨
2013-03-20
知道答主
回答量:43
采纳率:0%
帮助的人:9.6万
展开全部
我也遇到你说的问题了,你是怎么解决的,求组!!!谢谢
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
梦的田
2012-03-07
知道答主
回答量:6
采纳率:0%
帮助的人:3.6万
展开全部
那你最后是怎么解决的?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
sniper82556455
2010-05-15 · TA获得超过343个赞
知道答主
回答量:64
采纳率:0%
帮助的人:0
展开全部
不大明白啊
把程序贴上来看看
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 3条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式