2016-04-10 9 views
2

Ich lese bereits the other discussion here on SO, aber ich kann immer noch nicht verstehen, warum der Code nicht wie erwartet funktioniert.Matlab, k = 1,000000000000000 aber k == 1 liefert 0

In meinem Code ich überprüfen, ob k-1 annähernd gleich ist, aber noch ist es nicht funktioniert:

if approx(k, 1, eps) 
    display('Approx equal'); 
else 
    k 
    k == 1 
    approx(k, 1, eps) 
    abs(k - 1) < eps 
end 

Statt die Zeichenfolge anzuzeigen, ist dies das Ergebnis ist (ich habe format long aktiviert):

k = 1.000000000000000 
ans = 0 
ans = 0 
ans = 0 

Das ist verwirrend! Ich habe auch versucht, den Fehler um k * 1e20 zu erhöhen, aber das Ergebnis ist immer noch 1e20 ... Was ist hier zu tun?

Hinweis: wenn auch nicht wirklich relevant für die Frage, hier ist die Definition von approx:

function r = approx(a, b, tol) 
    r = a <= b + tol && a >= b - tol; 
end 

EDIT: Ich änderte die approx Funktion katastrophale Löschung zu vermeiden:

function r = approx(a, b, tol) 
    r = a <= b + tol && a + tol >= b; % assumes tol is positive 
end 
+1

Ich kann nur darauf hinweisen, dass ich dies nicht reproduzieren kann (R2015a OS X 64-Bit). Welche Version von Matlab benutzt du? – dfri

+0

@dfri Ich verwende R2015b unter Windows 32-Bit. – rubik

+0

Bitte ändern Sie Ihren Code, um mindestens 17 signifikante Ziffern zu drucken, damit wir Ihr Problem reproduzieren können. Code zum Ausdrucken 17 signifikante Stellen finden [in meiner Antwort hier] (http://stackoverflow.com/a/35626253/2732801) – Daniel

Antwort

1

Versuchen Sie die Anzeige:

k - 1.000000000000000 

Ich denke Sie werden feststellen, dass es einen winzigen, aber von Null verschiedenen Restwert gibt.

Verwandte Themen