关于matlab里while循环的小问题

img


想问一下,在matlab里,这样写为什么循环只执行10次

j = 1的时候 j<=2 执行1次
j = 1.1的时候 j<=2 执行2次
j = 1.2的时候 j<=2 执行3次
j = 1.3的时候 j<=2 执行4次
j = 1.4的时候 j<=2 执行5次
j = 1.5的时候 j<=2 执行6次
j = 1.6的时候 j<=2 执行7次
j = 1.7的时候 j<=2 执行8次
j = 1.8的时候 j<=2 执行9次
j = 1.9的时候 j<=2 执行10次
j = 2.0的时候 j<=2 执行11次
题主是不是这么认为的呢?
matlab里面所有的小数都是有误差的,每次加一个小数,事实上,到了第十次,已经不是精确等于2了,而是比2大一点。
下面用这段代码看看是不是不精确

j = 1;
count = 0;%计算循环次数
format long%输出显示多位小数
while (j<=2.0)
    count = count + 1
    j = j + 0.1
end

输出结果:

count =

     1


j =

   1.100000000000000


count =

     2


j =

   1.200000000000000


count =

     3


j =

   1.300000000000000


count =

     4


j =

   1.400000000000000


count =

     5


j =

   1.500000000000000


count =

     6


j =

   1.600000000000001


count =

     7


j =

   1.700000000000001


count =

     8


j =

   1.800000000000001


count =

     9


j =

   1.900000000000001


count =

    10


j =

   2.000000000000001

这个结果告诉我们,第十次循环结束后,j没有精确等于2,而是比2大,退出了循环。
这也就是说,我们在编写代码的时候,循环变量不要用小数判断,而用计数循环判断,如果要用小数判断,那么需要给个盈余空间,这样才行