matlab 中 eps 的分析
生活随笔
收集整理的這篇文章主要介紹了
matlab 中 eps 的分析
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
eps(a)是|a|與大于|a|的最小的浮點(diǎn)數(shù)之間的距離,距離越小表示精度越高。默認(rèn)a=1:
這里直接在matlab中輸入:eps == eps(1)(true). 我們知道浮點(diǎn)數(shù)其實(shí)是離散的,有限的,而且間隔是不均勻的。我們可以說一個(gè)數(shù)旁邊的數(shù)是什么, 而它們之間的距離就反應(yīng)了其精度。越靠近0,數(shù)和數(shù)之間就越密集,精度就越高。
那么eps/2就應(yīng)該四舍五入到0或eps,但實(shí)際上卻能精確表示出來。正確的說法是eps=eps(1),是1的精度。
也就是說matlab無法表示介于1和1+eps之間的數(shù),這些數(shù)將被四舍五入到1或1+eps。比如1+0.3*eps被舍入到1,
而1+0.7*eps被舍入到1+eps。可以用下面的語句進(jìn)行驗(yàn)證:
1+0.3*eps==1%true
1+0.7*eps==1%false
1+0.7*eps==1+eps%true
正如前面所說,對(duì)浮點(diǎn)數(shù)而言,越靠近0,精度就越高。因此2的精度就比1的精度要低。
事實(shí)上,matlab無法區(qū)分介于2和2+2*eps之間的數(shù)。也就是說eps(2)=2*eps,下面是驗(yàn)證:
2+eps==2%true,說明matlab無法區(qū)分2和2+eps
1+eps==1%false,說明matlab可以區(qū)分1和1+eps,因此1的精度比2高
0的精度是最高的,也就是說eps(0)才是matlab所能表示的最小的正數(shù)。它和eps相比相差了300多個(gè)數(shù)量級(jí),
eps和它相比大的簡(jiǎn)直是個(gè)天文數(shù)字。
好了看了上面的分析應(yīng)該知道怎么回事了,不過知道了eps是什么,但是對(duì)于為什么精度這樣變化,我提出我的理解:
這里的精度跟數(shù)字在電腦的存儲(chǔ)方式有關(guān),計(jì)算機(jī)的存儲(chǔ)位數(shù)是一定的,可是表示 1 只要一位,表示 2 要兩位數(shù),
比如:eps(2)==eps(3) %true; 另外:eps(4) = eps(7) != eps(8)...
對(duì)照上邊的例子:2+eps==2%true 而 2 + eps(2) == 2 %false...這里不寫太多例子了,分析下這個(gè)例子,
第一個(gè)eps默認(rèn)為eps(1)加上2以后,由于表示的位數(shù)限制,不能表示到eps(1)的精度,所以小數(shù)部分直接溢出
了,而第二個(gè)等式在表示精度范圍內(nèi)所以小數(shù)部分不會(huì)略去,還不懂的話,我再給大家看一下:
3 + eps(2) == 3 %false; 4 + eps(2) == 4 %ture.....不知道懂了沒有,自己再體會(huì)一下。。。
這里直接在matlab中輸入:eps == eps(1)(true). 我們知道浮點(diǎn)數(shù)其實(shí)是離散的,有限的,而且間隔是不均勻的。我們可以說一個(gè)數(shù)旁邊的數(shù)是什么, 而它們之間的距離就反應(yīng)了其精度。越靠近0,數(shù)和數(shù)之間就越密集,精度就越高。
下面引用百度知道中 greatdju 的詳細(xì)回答:
?
首先,eps不是matlab所能表示的最小的正數(shù)。可以試試eps和eps/2,如果eps真的是最小的正數(shù),那么eps/2就應(yīng)該四舍五入到0或eps,但實(shí)際上卻能精確表示出來。正確的說法是eps=eps(1),是1的精度。
也就是說matlab無法表示介于1和1+eps之間的數(shù),這些數(shù)將被四舍五入到1或1+eps。比如1+0.3*eps被舍入到1,
而1+0.7*eps被舍入到1+eps。可以用下面的語句進(jìn)行驗(yàn)證:
1+0.3*eps==1%true
1+0.7*eps==1%false
1+0.7*eps==1+eps%true
正如前面所說,對(duì)浮點(diǎn)數(shù)而言,越靠近0,精度就越高。因此2的精度就比1的精度要低。
事實(shí)上,matlab無法區(qū)分介于2和2+2*eps之間的數(shù)。也就是說eps(2)=2*eps,下面是驗(yàn)證:
2+eps==2%true,說明matlab無法區(qū)分2和2+eps
1+eps==1%false,說明matlab可以區(qū)分1和1+eps,因此1的精度比2高
0的精度是最高的,也就是說eps(0)才是matlab所能表示的最小的正數(shù)。它和eps相比相差了300多個(gè)數(shù)量級(jí),
eps和它相比大的簡(jiǎn)直是個(gè)天文數(shù)字。
好了看了上面的分析應(yīng)該知道怎么回事了,不過知道了eps是什么,但是對(duì)于為什么精度這樣變化,我提出我的理解:
這里的精度跟數(shù)字在電腦的存儲(chǔ)方式有關(guān),計(jì)算機(jī)的存儲(chǔ)位數(shù)是一定的,可是表示 1 只要一位,表示 2 要兩位數(shù),
比如:eps(2)==eps(3) %true; 另外:eps(4) = eps(7) != eps(8)...
對(duì)照上邊的例子:2+eps==2%true 而 2 + eps(2) == 2 %false...這里不寫太多例子了,分析下這個(gè)例子,
第一個(gè)eps默認(rèn)為eps(1)加上2以后,由于表示的位數(shù)限制,不能表示到eps(1)的精度,所以小數(shù)部分直接溢出
了,而第二個(gè)等式在表示精度范圍內(nèi)所以小數(shù)部分不會(huì)略去,還不懂的話,我再給大家看一下:
3 + eps(2) == 3 %false; 4 + eps(2) == 4 %ture.....不知道懂了沒有,自己再體會(huì)一下。。。
?
轉(zhuǎn)載于:https://www.cnblogs.com/ling-dian/p/3601434.html
總結(jié)
以上是生活随笔為你收集整理的matlab 中 eps 的分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 删除bin后,Eclipse重新编译项目
- 下一篇: matlab 中max函数用法