求助:关于精度问题
tan(-pi/4)*5ans =
-5
>> 1/tan(-pi/4)*5
ans =
-5
>> 1/tan(-pi/4)*5+5
ans =
-1/1125899906842624
最后一次算的时候他把pi/4给先算出来了再代入了,怎么样可以防止这个误差呢
回复 楼主 fz4 的帖子
运算优先级的问题可以用括号
1/tan(-pi/4)*5+5
ans =
-8.8818e-016
不过,我没有出现你所说的情况
[ 本帖最后由 sigma665 于 2008-9-15 10:22 编辑 ] ?我只是把那个用分数表示了,我算出来跟你一样的其实,反正不是0,可是应该要=0
回复 板凳 fz4 的帖子
这个应该是matlab里面计算的容许误差, -8.8818e-016双精度能表示的最高精度好像就是到1e-16这个数量级了。
不过,好像可以通过类似符号计算之类的方法得到精确解(记得好像看过类似的东西,不能肯定),具体的方法得再找找 可是这个关键出在了我的一个判断语句中,要判断它是大于零还是小于零还是=0~然后整个事情就变了。。。
回复 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
回复 6楼 fz4 的帖子
跟0比较,不能直接比应该与一个很小的数比
这个应该是常识了
回复 8楼 sigma665 的帖子
不一定仅有0!任何两数相比都要小心
页:
[1]