[問題] 浮點數比較問題

看板C_and_CPP作者 (On my way)時間14年前 (2011/11/14 18:40), 編輯推噓2(2013)
留言15則, 6人參與, 最新討論串1/2 (看更多)
在C裡面,實數若用double型態存放,精準度大概可達10^(-15)左右 現在有兩個數字a,b (a,b會小於1,但是可能比10^-15還低) 把a和b經過一個數值運算函式之後可能會比這個10^(-15)還低 然後我想比較他們的大小。 第一種情況,若a,b已經小於10^(-15) 那在數值運算函式裡,一直在對不夠精準的數做計算 得到的結果應該不適合拿來比較... 第二種情況,假設a,b不會小於10^(-15) 但最後計算出來的值有可能會小於10^(-15) 既然輸出小於精準度了,比較的結果好像也不精準 如果要避免上述的問題,除了在一開始對a和b的表示法 以及在數值運算函式裡做適當的Scale外,還有其他方法嗎? -- 現代人普遍的現象: 「小學而大遺」、「捨本而逐末」、「以偏而概全」、「因噎而廢食」 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.144.28

11/14 18:46, , 1F
用long double
11/14 18:46, 1F

11/14 18:47, , 2F
應該有函式庫實作出速度較慢但是精確的數值計算?
11/14 18:47, 2F

11/14 19:45, , 3F
log
11/14 19:45, 3F

11/14 20:23, , 4F
精確的表達,是2^-52,除了換 Scale,高精度型態,沒更好了
11/14 20:23, 4F

11/14 21:30, , 5F
某教授說有函式庫可以做精準的計算,但我不知道名稱 orz
11/14 21:30, 5F

11/14 21:46, , 6F
high precision library 一狗票,google 隨便搜都有,但
11/14 21:46, 6F

11/14 21:46, , 7F
支援(int/float/math library)不一,品質也不一,真有需
11/14 21:46, 7F

11/14 21:47, , 8F
求先試試 MPFR C++, 我挑它的原因是支援math library.
11/14 21:47, 8F

11/16 00:55, , 9F
我講的是 exact computation... 沒誤差而不是有小誤差 xD
11/16 00:55, 9F

11/16 00:59, , 10F
我只是想說除了把誤差越弄越小外還有其他方法...
11/16 00:59, 10F

11/16 01:05, , 11F
很多函式庫只是把問題延遲(變成更小的時候才會爆炸)而無
11/16 01:05, 11F

11/16 01:05, , 12F
法徹底避免這個問題。
11/16 01:05, 12F

11/16 17:46, , 13F
to 3F,如果數字已經小到10^(-15)以下,取log還有用嗎?
11/16 17:46, 13F

11/16 17:48, , 14F
to 4F,是針對任何實數都可以到達2^(-52)?還是只有某些數?
11/16 17:48, 14F

11/16 17:49, , 15F
感謝各位朋友上面的回文,我會再多google看看這方面的解法
11/16 17:49, 15F
文章代碼(AID): #1EmF0t9w (C_and_CPP)
文章代碼(AID): #1EmF0t9w (C_and_CPP)