很多人学习matlab的时候往往会忽视matlab运算的精度问题,然后导致写出来的程序往往算不出理想的结果,举几个例子,这个是我在matlab贴吧看到一位同学求救(http://tieba.baidu.com/p/4130057069),他的程序没错,但是总是算不出理想的结果:
count=0
n=1000
for i=1:n
a=rand(1,1);
if (cos(a))^2+(sin(a))^2<=1
count=count+1
end
end
count/n
算出来的count/n总是小于1的。这就是典型的运算精度造成的问题,只要将判断语句改成(cos(a))^2+(sin(a))^2<=1.0001即可。
还有个例子是有同学在matlab气象家园里问的,他写了一个很长的程序,但是总是算不出他想要的结果,然后他花了很长时间才找到原因,他误以为ceil(0.1*12*10)的结果是12,其实不然,算出来是13,ceil(0.1*10*12)算出来才是12,为什么会这样?原因在下图,a其实是一个比12大一点点的数,向无穷取整自然是13啦。
这一切都和浮点数在计算机中的存储有关。不仅仅是matlab,其他任何计算机语言都是如此,都算不出正确的结果来。