Angenommen, wir (a + b) auf zwei verschiedene Arten berechnet werden sollen, dasszwei gleiche Gleitkommazahlen in MATLAB Subtrahieren nicht gleich 0
ist (a + b) * (a + b)
ein + 2 ab + b
Jetzt , angenommen a = 1.4
und b = -2.7
. Wenn wir diese beiden Zahlen in den Formeln mit format long
Stecker erhalten wir in beiden Fällen 1.690000000000001
, das heißt, wenn ich das folgende Skript ausführen:
a = 1.4;
b = -2.7;
format long
r = (a + b) * (a + b)
r2 = a^2 + 2*a*b + b^2
abs_diff = abs(r - r2)
I erhalten
r = 1.690000000000001
r2 = 1.690000000000001
abs_diff = 6.661338147750939e-16
Was ist hier los? Ich könnte verschiedene Ergebnisse für r
oder r2
Vorschau (weil Matlab würde verschiedene Gleitkommaoperationen ausführen), aber nicht für den absoluten Wert ihrer Differenz Vorschau.
Ich habe auch bemerkt, dass der relative Fehler von r
und r2
verschieden sind, das heißt, wenn ich
rel_err1 = abs(1.69 - r)/1.69
rel_err2 = abs(1.69 - r2)/1.69
I erhalten
rel_err1 = 3.941620205769786e-16
rel_err2 = 7.883240411539573e-16
Dieses nur mich denken lässt, dass r
sind nicht wirklich das gleiche r2
. Gibt es eine Möglichkeit, sie dann vollständig zu sehen, wenn sie wirklich anders sind? Wenn nicht, was passiert?
Auch beide relative Fehler sind nicht weniger als eps/2
, bedeutet dies, dass ein Überlauf passiert ist? Wenn ja, wo?
Hinweis: Dies ist ein spezieller Fall. Ich habe verstanden, dass es sich um Gleitkommazahlen und Rundungsfehler handelt. Aber ich möchte sie besser verstehen, indem ich dieses Beispiel durchführe.
Es ist wahrscheinlich wegen die Tatsache, dass Gleitkommafehler abhängig sind ds auf dem * Auftrag *, * Typ * und * Anzahl * von Operationen. Ihre zwei Methoden haben unterschiedliche Anzahl und Arten von Operationen. Der mit [mehr Additionen führt theoretisch ein] (http://floating-point-gui.de/errors/propagation/) mehr Gleitkommafehler. Außerdem verursachen mehr Operationen eine größere Fehlerausbreitung. – Suever
@Suever Meine Intuition war, dass, da beide Methoden tatsächlich unterschiedlich implementiert sind, d. H. Verschiedene Gleitkommaoperationen verwenden, wir unterschiedliche Ergebnisse erhalten würden, und dies würde erklären, dass ihr Unterschied von 0 (auf jeden Fall) verschieden ist. Aber Matlab repräsentiert anscheinend "r" und "r2" in der gleichen Weise, also sollte ihr Unterschied 0 sein ... – nbro
was in Ihrem Beitrag zeigt, dass MATLAB 'r' und' r2' auf die gleiche Weise darstellt? – Suever