永发信息网

您好,关于matlab的eps

答案:4  悬赏:30  手机版
解决时间 2021-03-10 06:40
  • 提问者网友:趣果有间
  • 2021-03-09 06:24
您好,关于matlab的eps
最佳答案
  • 五星知识达人网友:思契十里
  • 2021-03-09 07:27
eps是一个函数。当没有参数时默认参数是1.返回的是该参数的精度。
也就是说单个的eps实际上是eps(1),表示的是1的精度。

这里要说一下精度的概念。浮点数所能表示的数值范围是很大的,但是浮点数不是无限的,连续的和稠密的;而是有限的,离散的和稀疏的,而且每个数的精度都不一样。越是靠近0,精度越高,反之则越低。eps返回的是1的精度。指的是1和离他最近的浮点数之间的距离。
我们输入eps可以看到1的精度。
也就是说离他最近的浮点数和他相差eps(1)。我们可以计算1+eps,他就是离1最近的浮点数。
如果我们计算出的数介于这两者之间,系统就会自动把它舍入到离他最近的数。1+eps*3/5离1+eps近,所以1+eps*3/5≈1+eps;1+eps*2/5离1近,所以1+eps*2/5≈1,而1+eps/2在正当中,系统自动把它舍入到1,即1+eps/2≈1

如果我们输入eps(2)可以看到2的精度,它只有1的精度的一半。即eps(2)=eps*2
因此系统会认为2+eps≈2,而2+eps*6/5≈2+eps*2=2+eps(2)
全部回答
  • 1楼网友:鸠书
  • 2021-03-09 11:26
这个主要是四舍五入的问题,我觉得,刚才试验了以下,分界点是0.5
1-(1+eps*0.5)=0
1-(1+eps*0.500000000001)=2.2204e-16
  • 2楼网友:行路难
  • 2021-03-09 09:56
eps=2.2204e-016
eps(2)=2.2204e-016 *2
eps(1/2)=2.2204e-016 *0.5
  • 3楼网友:孤老序
  • 2021-03-09 08:27
关键在于舍入误差的问题,由于你计算的数值正好在舍入取值的边缘
如果按浮点数运算,1+eps*3/5结果显示为1.0000,并没有取舍,
而1+eps*2/5计算结果为1,其微量部分已舍去。
所以你的这两个运算结果是不一样的。
如果不按浮点数运算,当然可以算出较精确的解
计算1-(1+eps*2/5)的精确结果:
转为符号运算,运行:
1-(1+sym(eps*2/5))
结果
ans=
-3602879701896397/40564819207303340847894502572032
再转为浮点数:
>>double(ans)
ans =
-8.8818e-017
可见,前者只是绝对值较小,并不为零。
还有你的一个笔误,1+1.3323e-016可不是等于2.3323e-016哦。。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯