作者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