[討論] double的精準度問題

看板C_and_CPP作者 (IDontBite)時間11年前 (2012/12/20 05:59), 編輯推噓3(303)
留言6則, 3人參與, 最新討論串1/1
最近在處理一些大型的矩陣運算, 會用到的運算就加減乘除, 型別用的是double, 但用double會因為一些四捨五入導致不精準的結果, 在使用operator == 時都需要做修正 我目前試了2種方法來解決... 第一種是自己寫一個fraction的class來代替double, 分子分母各用一個int來代表, 但這麼做int很快就爆掉了 Orz... (運算完都會最簡化但通分的殺傷力真的很強啊!!) 另一種就是在使用 == 時只取小數點後幾位來比較, 但我怕誤差累積之後超出我的精確度範圍? 又如果精確度取太低, bug就悄悄冒出來了QQ 不知道各位都是怎麼處理這種問題的@@? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.249.188.55

12/20 06:53, , 1F
通常我精度取 1e-9, 然後如果真的有數值差異超大的情況,
12/20 06:53, 1F

12/20 06:53, , 2F
改用經過測試過的大數函式庫,如 GMP.
12/20 06:53, 2F

12/20 06:54, , 3F
還有一個比較重要的, 處理 matrix 常會探討數值穩定度.
12/20 06:54, 3F

12/20 10:19, , 4F
用 double 還會需要用到 == 真是挺妙的
12/20 10:19, 4F

12/20 10:20, , 5F
不考慮大數嗎?
12/20 10:20, 5F

12/23 20:51, , 6F
12/23 20:51, 6F
文章代碼(AID): #1GqZYxrE (C_and_CPP)