c语言程序运行结果为什么出现1.#INF00?
#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啊 高人帮我修改一下吧 定义初值的数可以改变的。我把我所有的分都给你了 呵呵
还是不行啊 高人运行一下啊 帮我改改啊 还是那个结果啊 展开
是因为运算结果溢出。
解决办法,例:
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;
}
你用0.5,0.2试试。。。
把程序贴上来看看