看板 C_and_CPP 關於我們 聯絡資訊
最近在處理一些大型的矩陣運算, 會用到的運算就加減乘除, 型別用的是double, 但用double會因為一些四捨五入導致不精準的結果, 在使用operator == 時都需要做修正 我目前試了2種方法來解決... 第一種是自己寫一個fraction的class來代替double, 分子分母各用一個int來代表, 但這麼做int很快就爆掉了 Orz... (運算完都會最簡化但通分的殺傷力真的很強啊!!) 另一種就是在使用 == 時只取小數點後幾位來比較, 但我怕誤差累積之後超出我的精確度範圍? 又如果精確度取太低, bug就悄悄冒出來了QQ 不知道各位都是怎麼處理這種問題的@@? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.249.188.55
EdisonX:通常我精度取 1e-9, 然後如果真的有數值差異超大的情況, 12/20 06:53
EdisonX:改用經過測試過的大數函式庫,如 GMP. 12/20 06:53
EdisonX:還有一個比較重要的, 處理 matrix 常會探討數值穩定度. 12/20 06:54
Ebergies:用 double 還會需要用到 == 真是挺妙的 12/20 10:19
Ebergies:不考慮大數嗎? 12/20 10:20
alex780312:用這很方便 http://www.holoborodko.com/pavel/mpfr/ 12/23 20:51