作者IDontBite (IDontBite)
看板C_and_CPP
標題[討論] double的精準度問題
時間Thu Dec 20 05:59:21 2012
最近在處理一些大型的矩陣運算,
會用到的運算就加減乘除,
型別用的是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