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啦。

这一切都和浮点数在计算机中的存储有关。不仅仅是matlab,其他任何计算机语言都是如此,都算不出正确的结果来。

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空