作者chen5 (敝姓金)
看板MATLAB
標題[問題] 請問這是不是bug 該怎麼解決
時間Mon Nov 26 17:41:28 2012
請問我在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)
1F:→ icrtstyle:原因的話,我不確定,不過你可以用括號來區別 11/26 17:53
2F:→ icrtstyle:13/((86400*86400)-13)像這樣,matlab計算時不容易錯 11/26 17:56
3F:推 CBET:在 C++ 裡面輸出小數下 20 位,你會看到一樣的結果 11/26 19:07
4F:推 godswd:加括號也一樣啊,就像樓上講的是浮點數位數的問題 11/26 20:14
5F:→ godswd:『11/86400*86400』並不等於11.0000,因為預設只給你看四位 11/26 20:15
6F:→ godswd:你format long之後去看就知道了 11/26 20:18
7F:→ godswd:最簡單(偷懶)的解決方法就是在相減之前,用round把乘除的 11/26 20:21
8F:→ godswd:部分掛進去取最接近的整數,這樣答案應該就是你要的了 11/26 20:22
9F:推 ak075:精度問題,沒有所謂的零 11/26 23:47
10F:→ tomichy:問題發霉了 試試看用matlab打 sin(pi) 吧 ~~~~ 11/30 13:24