声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1111|回复: 8

[综合讨论] 求助:关于精度问题

[复制链接]
发表于 2008-9-15 08:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
tan(-pi/4)*5

ans =

      -5      

>> 1/tan(-pi/4)*5

ans =

      -5      

>> 1/tan(-pi/4)*5+5

ans =

      -1/1125899906842624

最后一次算的时候他把pi/4给先算出来了再代入了,怎么样可以防止这个误差呢
回复
分享到:

使用道具 举报

发表于 2008-9-15 10:20 | 显示全部楼层

回复 楼主 fz4 的帖子

运算优先级的问题
可以用括号
1/tan(-pi/4)*5+5
ans =
-8.8818e-016

不过,我没有出现你所说的情况

[ 本帖最后由 sigma665 于 2008-9-15 10:22 编辑 ]
 楼主| 发表于 2008-9-15 20:22 | 显示全部楼层
?我只是把那个用分数表示了,我算出来跟你一样的其实,反正不是0,可是应该要=0
发表于 2008-9-15 21:57 | 显示全部楼层

回复 板凳 fz4 的帖子

这个应该是matlab里面计算的容许误差,

评分

1

查看全部评分

发表于 2008-9-15 23:03 | 显示全部楼层
-8.8818e-016

双精度能表示的最高精度好像就是到1e-16这个数量级了。
不过,好像可以通过类似符号计算之类的方法得到精确解(记得好像看过类似的东西,不能肯定),具体的方法得再找找

评分

1

查看全部评分

 楼主| 发表于 2008-9-16 07:30 | 显示全部楼层
可是这个关键出在了我的一个判断语句中,要判断它是大于零还是小于零还是=0~然后整个事情就变了。。。
发表于 2008-9-16 08:21 | 显示全部楼层

回复 6楼 fz4 的帖子

其实问题出在tan这函数 !
不要忘记, matlab是使用数值方式求tan, 并无法正确得到tan(pi/4)=1
所以使用判断语句就需要小心 !
for your reference :
format long e; tan(-pi/4)
if (1/tan(-pi/4)*5)==5, disp('try'); end
if (1/tan(-pi/4)*5-5)<eps, disp('try'); end
发表于 2008-9-16 09:31 | 显示全部楼层

回复 6楼 fz4 的帖子

跟0比较,不能直接比
应该与一个很小的数比
这个应该是常识了
发表于 2008-9-16 10:03 | 显示全部楼层

回复 8楼 sigma665 的帖子

不一定仅有0!
任何两数相比都要小心

评分

1

查看全部评分

您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-19 17:30 , Processed in 0.059451 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表