[討論] 請問數值的表示問題

看板MATLAB作者 (Jason)時間8年前 (2016/12/25 10:49), 編輯推噓2(206)
留言8則, 3人參與, 最新討論串1/1
x=4.181-4.169 x = 0.0120 >> y=4.169-4.157 y = 0.0120 >> x-y ans = 8.8818e-016 請問大家有甚麼辦法可以讓 x-y = 0 ? 我另外算了以下: >> x=4.157-4.146 x = 0.0110 >> y=4.146-4.135 y = 0.0110 >> x-y ans = 0 為什麼這個的結果又是 0 ? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.161.212.167 ※ 文章網址: https://www.ptt.cc/bbs/MATLAB/M.1482634199.A.C2E.html

12/25 13:23, , 1F
數值儲存問題,因為電腦中用二進位,浮點數只能存成接近的
12/25 13:23, 1F

12/25 13:23, , 2F
數值(所以銀行據說使用BCD編碼存,就不會漏掉小數了)。顯示
12/25 13:23, 2F

12/25 13:23, , 3F
數值後面可能還有極小的數值差異。
12/25 13:23, 3F

12/25 13:25, , 4F
round(pi,3) ,四捨五入至3位小數
12/25 13:25, 4F

12/25 13:29, , 5F
所以if比較兩浮點時,千萬不要用==比,改用abs(a-b)<1e-10
12/25 13:29, 5F

12/25 13:29, , 6F
這形式。整數(integer型態)就沒這問題。
12/25 13:29, 6F

12/27 13:11, , 7F
machine error
12/27 13:11, 7F

12/27 20:57, , 8F
machine epsilon
12/27 20:57, 8F
文章代碼(AID): #1ONpFNmk (MATLAB)
文章代碼(AID): #1ONpFNmk (MATLAB)