Re: [問題] 關於分數計算誤差的問題

看板C_and_CPP (C/C++)作者 (山羊)時間15年前 (2011/04/13 23:17), 編輯推噓2(2014)
留言16則, 5人參與, 最新討論串2/2 (看更多)
※ 引述《lykosluna (Lykos)》之銘言: : 最近剛學C++ : 照著課本寫while()的習題時,有一題一直寫不成功 : 想請問板上前輩們,哪裡弄錯了呀? : ------ : Q: 有個公式在算攝氏近似值 : Celsius = 1/2 * ( Fahren - 30) : 請問攝氏幾度的時候,這個攝氏的近似值會大於攝氏的實際值4呢? : ------ : #include <iostream> : using namespace std; : int main() : { : int fahren = 0; : double acelsius = ( 1 / 2 ) * ( fahren - 30 ); : double ecelsius = ( 5 / 9 ) * ( fahren - 32 ); : double delta = 0.0; : while(delta <= 4) : { : delta = (acelsius - ecelsius); : cout << fahren << " "; : fahren = fahren + 1; : } : return 0; : } 小弟最近也剛接觸C++ 這程式我把它改成用FOR迴圈觀看特定範圍delta的值 也把公式的定義放進迴圈裏面 可是delta依舊還是0 可是程式裡delta完全沒給初值,怎會是0呢 不管怎麼改都是0 以下是我的程式碼 ------------------------------------- #include <iostream> using namespace std; int main() { int fahren ; double delta, acelsius,ecelsius; for(fahren=-20;fahren<20;fahren++) { acelsius = ( 1 / 2 ) * ( fahren - 30 ); ecelsius = ( 5 / 9 ) * ( fahren - 32 ); delta = (acelsius - ecelsius); cout << delta<<" "<<fahren<<endl ; } system ("pause"); return 0; } -------------------------------------------------- 希望有人能幫我解答 謝謝~~~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 112.104.126.141

04/13 23:21, , 1F
因此 1/2 的值為0, 5/9的值也為0, 所以ace~與ece~每次迴
04/13 23:21, 1F

04/13 23:21, , 3F
圈算的結果都是0. 計算數值時請特別留意, 整數與整數互
04/13 23:21, 3F

04/13 23:22, , 4F
相做加減乘除運算的結果也只會是整數. 修正方式為強轉型
04/13 23:22, 4F

04/13 23:23, , 5F
或者1,2這一對, 與5,9這一對, 其中一個數直接寫成#.0
04/13 23:23, 5F

04/13 23:23, , 6F
1/2, 1/2.0, 1.0/2, 1.0/2.0
04/13 23:23, 6F

04/13 23:24, , 7F
如1.0,2.0,5.0,9.0, 讓後續計算自動隱式轉型成浮點.
04/13 23:24, 7F

04/13 23:25, , 8F
簡單說, 試試double d = 樓上e大推文的那四種組合然後再
04/13 23:25, 8F

04/13 23:25, , 9F
印出d來看, 你會發現有一個的結果與眾不同出乎你預料XD
04/13 23:25, 9F

04/13 23:26, , 10F
Er~~小弟1F的推文是因'為', 詞組選錯字....Orz
04/13 23:26, 10F

04/13 23:26, , 11F
最簡單的方式就是不要把魔法數字寫在程式裡面...
04/13 23:26, 11F

04/13 23:26, , 12F
謝謝各位大大熱心解答~~~~
04/13 23:26, 12F

04/13 23:27, , 13F
double scale = 1 / 9; 然後 printf 看一下馬上就知道
04/13 23:27, 13F

04/13 23:27, , 14F
出問題, 後面根本沒有抓蟲的必要, 可讀性也會提高
04/13 23:27, 14F

04/13 23:28, , 15F
打錯, 分數是 5 / 9
04/13 23:28, 15F

04/14 11:32, , 16F
標題已修改為「關於分數計算誤差的問題」
04/14 11:32, 16F
文章代碼(AID): #1DfRwXPB (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1DfRwXPB (C_and_CPP)