看板 b97902HW 關於我們 聯絡資訊
大家好,我是路人甲阿南(咦) 在我慘烈地傳了N次之後總算是過了,感謝森林真強者(奇怪我又叫不一樣的稱呼了XD) 提供幾個浮點數誤差的修正點,供大家參考囉 1. 第一個位置(也就是輸入進來的),這個不用修正。 (理應不用修正吧,他又沒有做任何的事囧) 2. 跑迴圈的次數 計算跑迴圈的次數有很多種方式,可以用加減乘除,反正想的到得都可以(咦) 我是用減的,於是我的code出現了 while(T >= dt) { [...] T -= dt; } 這樣的寫法必須要修正成 T + 1e-10 >= dt才會過 請注意如果修正太小例如 1e-15的話,第六組測資會爆 然後據我剛剛的實驗結果,不加等於也是會過的,不過我覺得加上去比較好 比較符合真正的意涵 如果是除法的修正,我想這篇原PO已經給的很清楚了 強制轉換型別的(int)記得要跟後面要轉的東西連好,不然他不會理你 for(j=1; j<=(int)(T / dt + 1e-10); j++) 小小的建議是可以把中間部分先在外面寫好,畢竟除法也是挺花時間的~ T /= dt; T += 1e-10; 偷懶寫成 T /= dt, T += 1e-10;也是可以的 這應該是coding style的問題,強者們有要PO教學文嗎XD (還是已經PO過了囧?) 3. 輸出的部份 這篇的原PO也提過了,因為有可能有-0.000的情況 所以在printf()那裡要修正1e-10。 (這個部份可以修正1e-15沒有問題) 4. 比較的部份 呃,這題在比較大小時沒有誤差造成的問題,所以可以不用修正XD 有時候如果有等於之類的就要注意一下了~(像剛剛2.我的寫法就是) 大致的誤差點應該就只有這樣,如果這幾個地方都對了但是還沒有過, 那可能要檢查一下其他的地方,然後找真強者們幫忙啦XD 好了,路人甲的廢言就到此結束了 請大家看在我這麼認真PO文的份上,明天要記得來幫女籃加油唷囧/ 我去睡了,各位晚安XD -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.116.50.107
benck:我也是找森林真強者問問題的呢 !! 10/02 00:46
sa072686:噢大家都找森林真強者耶,有PO文有差XD 10/02 01:09
iForests:Q_____Q 謝謝大家 10/02 01:15
sa072686:結果找我的都是殺鋼彈XDDD 10/02 01:40