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
Ich kann nur darauf hinweisen, dass ich dies nicht reproduzieren kann (R2015a OS X 64-Bit). Welche Version von Matlab benutzt du? – dfri
@dfri Ich verwende R2015b unter Windows 32-Bit. – rubik
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