2016-05-06 8 views
2

Ich habe eine Frage bezüglich der Genauigkeit der num2str() fctn in MatLab.präzision num2string matlab

a=0.11111111111111; 
b=a; 

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

Kann jemand erklären, woher die Zahlen nach der 15. Dezimalstelle kommen, wenn ein Linux/OSX-System verwendet wird? Was ist die maximale Genauigkeit, die num2str() erreichen kann?

Es gibt einen Hinweis auf die num2str-Dokumentation, die ich nicht vollständig verstehe.

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

Es hängt von Ihrer Computer-Hardware und Betriebssystem. – excaza

+1

Entschuldigung, das ist offensichtlich und keine Erklärung – moatze

Antwort

3

Werfen Sie einen Blick auf eps (https://de.mathworks.com/help/matlab/ref/eps.html), die Ihnen die Gleitkommazahlen relative Genauigkeit gibt, die auf dem System-Architektur abhängt.

Haben Sie einen weiteren hier: https://de.mathworks.com/matlabcentral/answers/26458-machine-epsilon:

Es bedeutet etwa, dass die Zahlen mit etwa 15 bis 16 Ziffern Genauigkeit gespeichert werden. Wenn eine Zahl ungefähr gleich 1 ist, dann bedeutet, dass es von etwa mit einem Fehler gespeichert wird 10^(- 16)

[...]

d = EPS (X) ist der positive Abstand von abs (X) auf den nächstgrößeren in Größenordnung Gleitkommazahl der gleichen Präzision wie X“

, die besagt, dass eine solche d = EPS (1) die kleinste positive Wert ist, dass (1 + d) ist genau darstellbare und ist anders als 1.

1 + eps (1) ist die kleinste darstellbare Zahl größer als 1, eine einzelne Bit-Differenz in der am wenigsten signifikanten (kleinste Änderung) Bit.

haben Sie auch einen Blick zu ihnen kommen in der Regel mehr darüber zu wissen (wie es nicht wirklich ein MATLAB spezifisches Thema ist): https://en.wikipedia.org/wiki/Machine_epsilon

+1

Siehe auch: [Fließkommazahlen] (http://www.mathworks.com/help/matlab/matlab_prog/floating-point-numbers.html) – excaza

+0

ignoriert Windows den Fehler und Unix-Systeme zeigen einen zufälligen Fehler im Bereich von 10^(- 16)? – moatze

+0

@moatze wieder, * es ist Hardware und Betriebssystem abhängig *. Ich bekomme '0,222222222222221999' auf meinem Windows-Rechner. – excaza