BCB執行中產生floating point overflow問題 |
|
chsyang@pchome.com.tw
一般會員 發表:1 回覆:2 積分:0 註冊:2002-08-11 發送簡訊給我 |
|||
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
|||
chsyang@pchome.com.tw
一般會員 發表:1 回覆:2 積分:0 註冊:2002-08-11 發送簡訊給我 |
不好意思,初學者......
請多指教! 下面是主要部分: -----最前宣告-----------
#define IMAGE_WIDTH 256
#define IMAGE_HEIGHT 256
unsigned char Importimage[IMAGE_HEIGHT][IMAGE_WIDTH];
bool Init_flag=false; -----功能按鍵------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
//---------二值化-----------------
float p[256], q1[256],q2[256],u1[256],u2[256],v1[256],v2[256],max[256],min[256];
int t=0,t1=0,t2=0,y=0,x=0;
//---------p(i)----------- for(y=0;y<=255;y )
{
for (x=0;x<=255;x )
{
t=int(Importimage[y][x]);
p[t]=p[t] float(1/65536);
}
} //---------q(t)------------
for(t=0;t<=255;t )
{
for (y=0;y<=t;y )
{
q1[t]=q1[t] p[y];
q2[t]=1-q1[t];
}
} //----------u(t)-----------
for (t=0;t<=255;t )
{
for(y=0;y<=t;y )
{
if (q1[t]!=0)
u1[t] =float(y)*p[y]/q1[t];
}
} for (t=0;t<=255;t )
{
for(y=t 1;y<=255;y )
{
if (q2[t]!=0)
u2[t] =float(y)*p[y]/q2[t];
}
}
//-----------v(t)-----------
for (t=0;t<=255;t )
{
for(y=0;y<=t;y )
{
if (q1[t]!=0)
v1[t] =(float(y)-u1[t])*(float(y)-u1[t])*p[y]/q1[t];
}
}
for (t=0;t<=255;t )
{
for(y=t 1;y<=255;y )
{
if (q2[t]!=0)
v2[t] =(float(y)-u2[t])*(float(y)-u2[t])*p[y]/q2[t];
}
} //--------max()&min()------------- for (t=0;t<=255;t )
{
max[t]=q1[t]*q2[t]*(u1[t]-u2[t])*(u1[t]-u2[t]);
min[t]=q1[t]*v1[t] q2[t]*v2[t];
if (max[0]<=max[t])
{
max[0]=max[t];
t1=t;
}
if (min[0]>=min[t])
{
min[0]=min[t];
t2=t;
}
} Edit1->Text=FloatToStr(max[0]);
Edit2->Text=FloatToStr(min[0]);
Edit3->Text=t1;
Edit4->Text=t2; for(y=0;y<=255;y )
{
for(x=0;x<=255;x )
{
if (Importimage[y][x] >=t)
Importimage[y][x]=255;
else
Importimage[y][x]=0;
}
} MbufPut2d(MilImage,0,0,256,256,Importimage);
MdispSelectWindow(MilDisplay2,MilImage,result->Handle);
} 發表人 - chsyang@pchome.com.tw 於 2002/08/12 17:38:29
|
||
dllee
站務副站長 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
會有 floating point overflow 的問題,一定是您的程式中有發生除以 0 或是多次相乘到數值爆掉!!
說真的,您的程式有點複雜,很難用「看」的看出那有問題,建議您使用 try
{
... 您原來的數值計算部分 ...
}
catch(Exception &E)
{
... 發生 floating point overflow 的問題!!
... 把各項變數列表出來,查看是那個變數導致的問題
} 這樣的方式,可以很快找出是那一段程式碼有問題喔。 沒空更新的網頁...
------
http://www.ViewMove.com |
||
chsyang@pchome.com.tw
一般會員 發表:1 回覆:2 積分:0 註冊:2002-08-11 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |