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

浮點數運算的問題

答題得分者是:rogan321
bug57520
一般會員


發表:7
回覆:2
積分:1
註冊:2004-04-26

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-04-04 16:07:27 IP:220.136.xxx.xxx 未訂閱
若將u,r,g,b設int 則以下 for(r=0;r<256;r ) for(g=0;g<256;g ) for(b=0;b<256;b ) { u=-0.147*r-0.289*g 0.436*b; if(u>max)max=u; }u輸出為111 若將u,r,g,b設為float的話 111.180000305176 請問該如何得到正確的值(111.18)?
rogan321
高階會員


發表:21
回覆:307
積分:200
註冊:2003-05-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-04-04 16:48:33 IP:203.204.xxx.xxx 未訂閱
 
Ex1:
#include "SysUtils.hpp"
....
....
....   
float a=111.180000305176;
Label1->Caption=FloatToStrF(a,ffFixed,5,2);    Ex2:    #include "stdio.h"
....
....
.... 
float a=111.180000305176;
char size[256]={0};
sprintf(size,"%.5G", a);
Label1->Caption=(AnsiString)size;    
發表人 - rogan321 於 2005/04/04 16:51:31
bug57520
一般會員


發表:7
回覆:2
積分:1
註冊:2004-04-26

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-04-04 17:07:11 IP:220.136.xxx.xxx 未訂閱
#include "SysUtils.hpp" .... .... .... float a=111.180000305176; Label1->Caption=FloatToStrF(a,ffFixed,5,2); ----------------------------------------------- 這樣是將他用字串的形式顯示出來.... 若我要直接拿111.18來運算 這樣就要將字串在轉回浮點數(好像也不能轉) 請問有沒有辦法可以直接找出111.18來使用? 發表人 - bug57520 於 2005/04/04 17:10:24
rogan321
高階會員


發表:21
回覆:307
積分:200
註冊:2003-05-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-04-04 18:14:10 IP:203.204.xxx.xxx 未訂閱
你了解浮點數的意思嗎~為什麼不叫小數就好~所以浮點運算一定會有誤差 不過像float的誤差在5位數以後~所以一般數學運算可以接受~要更精密 則使用double 轉回可以阿~StrToFloat()或StrToFloatDef()即可~也等於是修正了誤差值 ~請參考help文件
系統時間:2024-05-17 19:20:55
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!