主题:小小问题,期待解答!!!谢了
gulihulu
[专家分:0] 发布于 2006-05-18 11:09:00
楼主 k2=m*m*(1-u*u);
这是我所用到的语句,其中m=395.989990234375,u=0.3
为什么运算时回提示数据益处呢?
这是我程序里的一个部分,问题是出在m的值上吗 ?
回复列表 (共6个回复)
沙发
rudolf [专家分:440] 发布于 2006-05-18 13:14:00
检查你的数据类型
板凳
gulihulu [专家分:0] 发布于 2006-05-18 20:27:00
void __fastcall TForm1::Button1Click(TObject *Sender)
{
float m,n,b,lw,tk,tox,f,l1,x,r,l2,ey,e,ac,q,u;
const double pi=3.14;
long double a1,a2,a3,kj,ki,km,kic;
double z,v,jic;
int y,t;
y=1;
t=0;
m=236.671;
n=3.014;
lw=300;
tk=2760;
tox=6000;
v=1.96e5;
x=545;
u=0.3;
b=StrToFloat(Edit1->Text);
while(y)
{
f=145-b;
if(f>110) jic=61.3+34.4*(145-f)/35;
else jic=95.7+67.8*(110-f)/20;
z=jic*v/(1-u*u);
kic=sqrt(z);
ki=2.11*m*sqrt(pi*b)/pi;
kj=2.11*n*sqrt(pi*b)/pi;
a1=0.35*log10(tk)+0.65*log10(lw)-2.07;
a2=0.47*log10(tox)+0.53*log10(lw)-3.77;
e=(ki/x)*(ki/x);
ey=(1-u)*(1-u);
r=e*ey/(2*pi);
ac=0.2539*jic*v/(m*m-m*m*u*u)-r;
if(ki<0.6*kic)
{
km=ki-kj;
a3=1.95*log10(km)+log10(lw)-8.6;
q=pow(10,a1)+pow(10,a2)+pow(10,a3);
b+=q;
t=t+1;
}
if(b>ac) break;
}
Edit2->Text=FloatToStr(b);
Edit3->Text=FloatToStr(ac);
Edit4->Text=FloatToStr(t);
}
其中b=10,麻烦各位帮忙给看看,错在那里?
为什么 if(ki<0.6*kic) 和 km=ki-kj; 这两句总是说数据溢出呢?
楼上的能帮忙给看一下吗?
3 楼
rudolf [专家分:440] 发布于 2006-05-19 08:30:00
代码没什么问题。
好好检查一下你的算法吧。
应该是
if(b>ac) break;
一直满足不了,最后数据溢出。
4 楼
gulihulu [专家分:0] 发布于 2006-05-19 08:54:00
好象是这样的哦!可是我该怎么下手去改进呢/?
有点不懂,本来想把流程图发到上面,可是发不上去,我发到你的邮箱,你帮忙给看一下好吗 ?
5 楼
rudolf [专家分:440] 发布于 2006-05-19 12:57:00
你还是仔细研究下你的算法吧。
自己把数据代进去,一步一步的跟踪,看看各个数据是否是按预想的方向收敛的。
几个循环下来,估计你就可以找到问题之所在了。
6 楼
雪天飞剑 [专家分:0] 发布于 2006-05-20 10:38:00
可以一步一步的执行,看看在什么地方出现问题的!
我来回复