[問題] 能幫新手解惑嗎? 卡好久...

看板C_and_CPP (C/C++)作者 (crab)時間16年前 (2010/06/28 09:34), 編輯推噓4(4013)
留言17則, 5人參與, 最新討論串1/1
小弟在練習C的讀檔 把讀到的digit放在陣列 並利用pow函式計算出其10進位的值 CODE=>http://codepad.org/oecd2Sxk 記得在桌面建個test.txt 內容請打100再"換行" 跑出來的結果竟然是99 跟預期的100差1 拜託大家幫我解解惑了 謝謝!! PS 我發現內容的數字大於100都會錯 ex 99 就會計算正確.. 99=9*10^0 + 9*10^1 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 203.121.238.250

06/28 10:09, , 1F
其實不是>100會錯, 而是某些範圍的會錯, 像1000會對,
06/28 10:09, 1F

06/28 10:10, , 2F
10000又錯了; 用DevC++測了一下結果有點怪, 不過懷疑
06/28 10:10, 2F

06/28 10:10, , 3F
都是precission的問題; 下面是測試code:
06/28 10:10, 3F

06/28 10:11, , 4F
printf("%d\t%d\n", (int)pow(10,2), (int)pow(10,i));
06/28 10:11, 4F

06/28 10:11, , 5F
後面的i是 int i=2; 結果一個印出 100 99 出來@_@"
06/28 10:11, 5F

06/28 10:12, , 6F
但如果兩個pow都先用double變數d1,d2接再印, 就都100
06/28 10:12, 6F

06/28 10:13, , 7F
(所以想直接印Hex來對也有點麻煩~_~) 如果不想追究原因,
06/28 10:13, 7F

06/28 10:13, , 8F
result+=d*(int)(pow(10,j)+0.5); 強迫四捨五入應該OK;
06/28 10:13, 8F

06/28 10:14, , 9F
要追究原因嘛, 不知道要不要disasm看中間發生什麼事@_@"
06/28 10:14, 9F

06/28 10:48, , 10F
強迫四捨五入 為啥是加0.5 猜不透= =?
06/28 10:48, 10F

06/28 10:51, , 11F
disasm 我google 還是不太懂式做啥的 謝謝你
06/28 10:51, 11F

06/28 10:55, , 12F
反組譯
06/28 10:55, 12F

06/28 12:14, , 13F
加0.5是因為0.4 + 0.5 = 0.9 ->0 0.6 + 0.5 = 1.1 -> 1
06/28 12:14, 13F

06/28 12:45, , 14F
如果最後要轉回整數, 一開始就自己寫個整數版的pow會
06/28 12:45, 14F

06/28 12:45, , 15F
比較不頭痛~ 囧
06/28 12:45, 15F

06/28 12:53, , 16F
推樓上l大XD 反正是算10自乘n次, 確實不用拿pow來用:)
06/28 12:53, 16F

06/28 14:36, , 17F
謝謝樓上大大無私的指點:P
06/28 14:36, 17F
文章代碼(AID): #1C9_mcsI (C_and_CPP)
文章代碼(AID): #1C9_mcsI (C_and_CPP)