[問題] 請問這是不是bug 該怎麼解決

看板MATLAB作者 (敝姓金)時間12年前 (2012/11/26 17:41), 編輯推噓3(307)
留言10則, 5人參與, 最新討論串1/1
請問我在matlab裡面做簡單運算,為何會算出錯的值? 用C++計算就沒這問題@@... >> 13/86400*86400-13 ans = 1.7764e-015 >> 11/86400*86400-11 ans = -1.7764e-015 在換算秒數天數的時候碰到的,我以為我應該會算出0。 請問這種錯誤要怎麼避免??? 希望能知道具體出錯原因,讓我能從程式裡面避開,拜託各位幫幫忙了!!! -- 小明小強是張老師的學生,張老師生日是M月N日,2人都知道張老師生日是下列10組中 的一天,張老師把M值告訴小明,把N值告訴小強,張老師問他們知道他生日是那天嗎? 3/4,3/5,3/8,6/4,6/7,9/1,9/5,12/1,12/2,12/8. 小明說:如果我不知道的話,小強肯定也不知道。 小強說:本來我也不知道,但是現在我知道了。 小明說:哦,那我也知道了。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.120.37.1 ※ 編輯: chen5 來自: 59.120.37.1 (11/26 17:42)

11/26 17:53, , 1F
原因的話,我不確定,不過你可以用括號來區別
11/26 17:53, 1F

11/26 17:56, , 2F
13/((86400*86400)-13)像這樣,matlab計算時不容易錯
11/26 17:56, 2F

11/26 19:07, , 3F
在 C++ 裡面輸出小數下 20 位,你會看到一樣的結果
11/26 19:07, 3F

11/26 20:14, , 4F
加括號也一樣啊,就像樓上講的是浮點數位數的問題
11/26 20:14, 4F

11/26 20:15, , 5F
『11/86400*86400』並不等於11.0000,因為預設只給你看四位
11/26 20:15, 5F

11/26 20:18, , 6F
你format long之後去看就知道了
11/26 20:18, 6F

11/26 20:21, , 7F
最簡單(偷懶)的解決方法就是在相減之前,用round把乘除的
11/26 20:21, 7F

11/26 20:22, , 8F
部分掛進去取最接近的整數,這樣答案應該就是你要的了
11/26 20:22, 8F

11/26 23:47, , 9F
精度問題,沒有所謂的零
11/26 23:47, 9F

11/30 13:24, , 10F
問題發霉了 試試看用matlab打 sin(pi) 吧 ~~~~
11/30 13:24, 10F
文章代碼(AID): #1GipbDVv (MATLAB)