求高手解释C++ builder 中Timer的运用
要是注释起最后一句NSTEPS++;可以出静态的图像,但是不注释就直接报float point devision by zero,很是奇怪,其他的参数也没有错的
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
double * data ;
data=new double[N] ;
Series1->Clear() ;
Series2->Clear() ;
Series3->Clear() ;
Series1->AddArray(data, N-1 ) ;
Series2->AddArray(data, N-1 ) ;
Series3->AddArray(data, N-1 ) ;
Series1->Clear() ;
Series2->Clear() ;
Series3->Clear() ;
for( int ii=0; ii<N; ii++ )
{
Series1->AddX( ii/0.2,"",clBlue ) ;
Series2->AddX( ii/0.2,"",clBlue ) ;
Series3->AddX( ii/0.2,"",clBlue ) ;
}
Series1->Clear() ;
Series2->Clear() ;
Series3->Clear() ;
for( int ii=0; ii<N; ii++ )
{
Series1->AddY( ii/0.2,"",clBlue ) ;
Series2->AddY( ii/0.2,"",clBlue ) ;
Series3->AddY( ii/0.2,"",clBlue ) ;
}
for (n=1; n<=NSTEPS; n++)
{
T++;
for (k=1; k<KE; k++)
{
dx[k]=dx[k]+ 0.5*(hy[k-1]-hy[k]);
}
pulse=exp(-0.5*(pow((t0-T)/spread,2.0)));
dx[kc]=dx[kc]+pulse;
for (k=0;k<KE;k++)
{ ex[k]=ga[k]*(dx[k]-ix[k]-sx[k]);
ix[k]=ix[k]+gb[k]*ex[k];
sx[k]=del_exp*sx[k]+gc[k]*ex[k];
}
for (k=0;k<KE;k++)
{
real_part[k]=real_part[k]+cos(arg*T)*ex[k];
imag_part[k]=imag_part[k]-sin(arg*T)*ex[k];
}
ex[0]=ex_low_m2;
ex_low_m2=ex_low_m1;
ex_low_m1=ex[1];
ex[KE-1]=ex_high_m2;
ex_high_m2=ex_high_m1;
ex_high_m1=ex[KE-2];
for (k=0; k<KE-1;k++)
{ hy[k]=hy[k]+0.5*(ex[k]-ex[k+1]); }
Series1->Clear() ;
Series2->Clear() ;
Series3->Clear() ;
for( int ii=0; ii<N; ii++ )
{
Series1->AddXY( ii/1.0, ex[ii], "", clRed ) ;
Series2->AddXY( ii/1.0, hy[ii], "", clBlue ) ;
}
}
NSTEPS++;
} C++?builder?timer()
[解决办法]
报这个错float point devision by zero 已经告诉你啦!
你仔细的检查一下所有除法的地方 什么情况下除0了!
[解决办法]
在每个除法操作前对操作数做个断言立马就能找到原因了
[解决办法]
既然已经找到出错的参数了,分步执行看看
[解决办法]
貌似发错版块了?