[問題] 如何判定二數是否幾乎相等已回收

看板MATLAB作者 (風的約定)時間15年前 (2009/04/28 23:11), 編輯推噓3(3010)
留言13則, 5人參與, 最新討論串1/1
最近在解一個問題時發現 假設a=1.000000000000000e-010 b=1.00000000000000000000123e-10 如果我直接a-b會為0 但我希望我的精確度可以更高 像是到1e-60 有爬文可用digits改變精確度 及使用vpa來算 但出來的答案仍然為0 請問我應該如何做才能得知這二個數是否為相等(接近相等,可能精確度到 1e-60) 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.90.115

04/28 23:14, , 1F
很難喔過去matalb定義1e-20多為0
04/28 23:14, 1F

04/28 23:24, , 2F
我試著用vpa('(1.00000000000000000000123e-10) - (1e-10)')
04/28 23:24, 2F

04/28 23:25, , 3F
可以為.123e-30
04/28 23:25, 3F

04/28 23:26, , 4F
但若用vpa(a-b)仍為0,是否有其他方法呢?
04/28 23:26, 4F

04/29 00:36, , 5F
你可以考慮把你的變數做一些適當的scale
04/29 00:36, 5F

04/29 00:43, , 6F
像是都乘以1e10這樣的作法,再比較嗎?
04/29 00:43, 6F

04/29 01:27, , 7F
scale 未必要真的乘進去,有時候可以心裡知道就好
04/29 01:27, 7F

04/29 01:29, , 8F
就像你看外面賣房子,他會寫1000"萬",不會寫 10000000
04/29 01:29, 8F

04/29 20:43, , 9F
ref. ieee754 基本問題是容器大小只有log10(2^52)
04/29 20:43, 9F

04/29 20:44, , 10F
當然無法得到正確的答案 以double double而言可用的
04/29 20:44, 10F

04/29 20:47, , 11F
fraction約(35)10位數
04/29 20:47, 11F

05/01 07:21, , 12F
考慮浮點數誤差,請以差值小於某極小值作為相等基準
05/01 07:21, 12F

05/01 07:22, , 13F
不然就是考慮犧牲效能,用大數來解決。
05/01 07:22, 13F
文章代碼(AID): #19znoI97 (MATLAB)