全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:3597
推到 Plurk!
推到 Facebook!

BCB執行中產生floating point overflow問題

 
chsyang@pchome.com.tw
一般會員


發表:1
回覆:2
積分:0
註冊:2002-08-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-08-11 14:31:19 IP:163.28.xxx.xxx 未訂閱
compiler後沒問題, 除了迴圈參數用int 其他array宣告都用double 如下: double p[256], q1[256],q2[256],u1[256],u2[256],v1[256],v2[256]; int t,t1,t2,y,x; 不知是宣告問題,還是什麼原因? 請各位高手指點... 發表人 - chsyang@pchome.com.tw 於 2002/08/11 15:12:33
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-08-12 08:52:09 IP:203.73.xxx.xxx 未訂閱
double p[256], q1[256],q2[256],u1[256],u2[256],v1[256],v2[256]; int t,t1,t2,y,x; 除了以上宣告 沒有其他的 codes 嗎??
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
chsyang@pchome.com.tw
一般會員


發表:1
回覆:2
積分:0
註冊:2002-08-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-08-12 17:35:16 IP:163.28.xxx.xxx 未訂閱
不好意思,初學者...... 請多指教! 下面是主要部分: -----最前宣告----------- #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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-08-13 10:12:57 IP:61.231.xxx.xxx 未訂閱
會有 floating point overflow 的問題,一定是您的程式中有發生除以 0 或是多次相乘到數值爆掉!! 說真的,您的程式有點複雜,很難用「看」的看出那有問題,建議您使用    try {   ... 您原來的數值計算部分 ... } catch(Exception &E) {   ... 發生 floating point overflow 的問題!!   ... 把各項變數列表出來,查看是那個變數導致的問題 }     這樣的方式,可以很快找出是那一段程式碼有問題喔。    沒空更新的網頁...
http://coolsite.to/dllee C及指標教學資料
http://coolsite.to/ushells 介紹 Shells
------
http://www.ViewMove.com
chsyang@pchome.com.tw
一般會員


發表:1
回覆:2
積分:0
註冊:2002-08-11

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-08-13 12:14:44 IP:163.28.xxx.xxx 未訂閱
你提供的方法,看起來真的很cool耶! 只是我不太懂這個用法, 可否舉個簡單的例子看看?
系統時間:2024-07-04 11:32:36
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!