floating point error :domain

来源:百度知道 编辑:UC知道 时间:2024/07/06 23:43:02
#include <math.h>
main()
{float tcl1,tcl2,ta,va,hc,mid,hcl,hcr,m,w,icl,fcl,sub;
scanf("%f,%f,%f,%f,%f,%f",&tcl1,&ta,&va,&icl,&m,&w);
if(icl<=0.078)
fcl=1+1.29*icl;
if(icl>0.078)
fcl=1.05+0.645*icl;
for(sub=1;sub>10e-3;sub=sub-0.001)
{mid=tcl1-ta;
hcl=2.38*pow(mid,0.25);
hcr=12.1*sqrt(va);
if(hcl>=hcr)
hc=hcl;
if(hcl<hcr)
hc=hcr; tcl2=35.7-0.028*(m-w)-icl*(3.96*10e-8*fcl*(pow(tcl1+273,4)+fcl*hc*(tcl1-ta)));
sub=fabs(tcl2-tcl1);
if(tcl2>tcl1)
tcl1=tcl1+0.001;
if(tcl2<tcl1)
tcl1=tcl1-0.001;
}
printf("%f,%f",hc,tcl1);
}
程序在tc2.0下运行,
程序目的:通过输入6个参数,通过已知公式(程序中给出)得到hc,tcl1的值。由于hc,tcl1公式相互嵌套(互为自变量),因此采用迭代运算,精度为0.001
编译:成功
运行:失败
症状:当输入参数:scanf("%f,%f,%f,%f,%f,%f",&tcl1,&ta,&va,&icl,&m,&w): 分别附值为:31,26,0.2,0.08,70,

是算法的问题,无编译器无关(即不是语法错误)

请检查for循环部分,由于循环中的sub=fabs(tcl2-tcl1); 改变了循环控制变量sub的值,所以使得循环的运行过程变得难以想象。