[已解决] 关于"=="逻辑判断和while使用的疑问

[复制链接]
billchu 发表于 2014-6-30 18:50:27
我遇到问题的代码如下所示:
  1. clc;clear all;close all
  2. i  = 0;
  3. ts = 0.5;
  4. while i>=0
  5.     if (i == ts)
  6.         disp('a')
  7.     end
  8.     i = i + 10/1000;
  9.     if i>3
  10.         break
  11.     end
  12. end
复制代码
我想要实现的功能是:当 i 和 ts 相等时,向屏幕输出字母 a,但是运行后屏幕却是空白。

我想是不是 if ( i == ts ) 这条语句有问题,因为之前在论坛上看到这篇帖子:https://www.ilovematlab.cn/thread-296793-1-1.html ,或许是精度问题,但我还是没想通为什么会这样。

另外,如果将 while 结构用 for循环来写,则能正常向屏幕输出字母 a,所以我不清楚到底是哪里出问题了。

Many thanks in advance.

最佳答案


中天3011 发表于 2014-6-30 19:16:45
(i == ts)不妨改为abs(i-ts)<=eps
回复此楼

8 条回复


中天3011 发表于 2014-6-30 19:16:45
(i == ts)不妨改为abs(i-ts)<=eps
回复此楼

倔强的笨蛋 发表于 2014-6-30 19:19:36
改成这个就好了
if abs(i-ts)<=eps
disp('a')
end
简单说计算机是2进制存储的,10/1000这个除法会引起误差,误差为eps,我没看你的for程序,但估计你for是用向量的,没有除法,所以没有误差

billchu 发表于 2014-6-30 19:36:09
倔强的笨蛋 发表于 2014-6-30 19:19
改成这个就好了
if abs(i-ts)

好的,谢谢!

我一开始修改为 if abs(i-ts) < eps,结果仍然不能输出屏幕,看来这个等号是很重要的啊

billchu 发表于 2014-6-30 19:37:03
中天3011 发表于 2014-6-30 19:16
(i == ts)不妨改为abs(i-ts)

修改后问题得到解决,谢谢!

中天3011 发表于 2014-6-30 19:40:44
billchu 发表于 2014-6-30 19:37
修改后问题得到解决,谢谢!

eps还可以改为特定的数值,如1e-6。
这类问题还可以用floor等取整函数对数值前几位数字进行比较。

billchu 发表于 2014-6-30 19:54:50
中天3011 发表于 2014-6-30 19:40
eps还可以改为特定的数值,如1e-6。
这类问题还可以用floor等取整函数对数值前几位数字进行比较。 ...

好的,多谢指教

Sinwee 发表于 2014-6-30 20:30:31
我把楼主的i = i + 10/1000;该成i = i + 0.1;就行了。。。。
此外你的while 形式也太繁杂了。。。

billchu 发表于 2014-7-1 12:37:08
Sinwee 发表于 2014-6-30 20:30
我把楼主的i = i + 10/1000;该成i = i + 0.1;就行了。。。。
此外你的while 形式也太繁杂了。。。
...

如果将代码中的 ts = 0.5 换成 ts = 0.09,仍然是不行的;

另外,出于流程控制的需要,有的时候使用 while 要比 for 容易。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
相关文章
热门教程
站长推荐
快速回复 返回顶部 返回列表