加载中…
个人资料
blue_ocean
blue_ocean
  • 博客等级:
  • 博客积分:0
  • 博客访问:8,506
  • 关注人气:139
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

matlab计算精度问题

(2015-10-30 08:33:12)
标签:

matlab

计算精度

误差

分类: matlab

      很多人学习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啦。

http://s1/bmiddle/003cvAxDgy6WBlbmvVm00&690


http://s7/bmiddle/003cvAxDgy6WBlbpxkO16&690
我在之前的博客http://blog.sina.com.cn/s/blog_aed5bd1d0102vngk.html也讨论过,这和浮点数在计算机中的存储有关。不仅仅是matlab,其他任何计算机语言都是如此,都算不出正确的结果来。

 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有