2016-05-06 78 views
2

我得到了一些MatLab中num2str()fctn的精度問題。precision num2string matlab

a=0.11111111111111; 
b=a; 

Linux/OSX: num2str(a+b,25): ans=0.2222222222222221655465116 
Windows: num2str(a+b,25): ans= 0.222222222222222 

任何人都可以解釋在使用Linux/OSX系統時小數點後15位的數字是從哪裏來的嗎? num2str()可以獲得的最大精度是多少?

num2str文檔中有一些提示,我完全不理解。

Note: If you specify precision to exceed the precision of the input floating-point data type, the results might not match the input values to the precision you specified. The result depends on your computer hardware and operating system. 
+1

這取決於您的計算機硬件和操作系統。 – excaza

+1

對不起,這是顯而易見的,沒有解釋 – moatze

回答

3

看一看epshttps://de.mathworks.com/help/matlab/ref/eps.html),它爲您提供了浮點相對精度,這取決於你的系統架構。

有進一步看這裏:https://de.mathworks.com/matlabcentral/answers/26458-machine-epsilon

它大致意味着號碼存儲約15-16位的 精度。如果一個數大約是1,則這意味着它可以被存儲並帶有錯誤 周圍10 ^( - 16)

[...]

d = EPS(X)是從正距離ABS(X)至相同的精度X」

下一中 幅度較大浮點數,指出d = EPS(1)是這樣的最小正值 (1 + d)是精確表示並且不同於1.

1 + eps(1)是最大的可表示數目大於1,在最低有效位(最小變化)位中有一個單獨的 位差異。

也可以看看這裏結識一般更多關於它(因爲它是不是一個真正的MATLAB特定主題):https://en.wikipedia.org/wiki/Machine_epsilon

+1

另請參見:[浮點數](http://www.mathworks.com/help/matlab/matlab_prog/floating-point-numbers.html) – excaza

+0

確實windows忽略錯誤而unix系統在10 ^( - 16)範圍內顯示一個隨機誤差? – moatze

+0

@moatze再次,*它的硬件和操作系統相關*。我的Windows機器上有'0.22222222222221999'。 – excaza