Warum ist 24.0000 nicht gleich 24.0000 in MATLAB?

Schreibe ich ein Programm, wo ich brauche, um doppelte Punkte gespeichert, die in einer matrix. Das problem ist, dass, wenn es darum geht zu überprüfen, ob diese Punkte werden in der matrix mit MATLAB kann nicht erkennen, Sie in die matrix, obwohl Sie existieren.

In den folgenden code intersections Funktion bekommt die Schnittpunkte:

[points(:,1), points(:,2)] = intersections(...
    obj.modifiedVGVertices(1,:), obj.modifiedVGVertices(2,:), ...
    [vertex1(1) vertex2(1)], [vertex1(2) vertex2(2)]);

Das Ergebnis:

>> points
points =
   12.0000   15.0000
   33.0000   24.0000
   33.0000   24.0000

>> vertex1
vertex1 =
    12
    15

>> vertex2    
vertex2 =
    33
    24

Zwei Punkte (vertex1 und vertex2) sollten beseitigt werden, aus dem Ergebnis. Es sollte getan werden, durch die folgenden Befehle:

points = points((points(:,1) ~= vertex1(1)) | (points(:,2) ~= vertex1(2)), :);
points = points((points(:,1) ~= vertex2(1)) | (points(:,2) ~= vertex2(2)), :);

Danach, haben wir dieses unerwartete Ergebnis:

>> points
points =
   33.0000   24.0000

Das Ergebnis sollte eine leere matrix. Wie Sie sehen können, die erste (oder zweite?) paar [33.0000 24.0000] wurde beseitigt, aber nicht die zweite.

Dann überprüfte ich diese zwei Ausdrücke:

>> points(1) ~= vertex2(1)
ans =
     0
>> points(2) ~= vertex2(2)
ans =
     1   % <-- It means 24.0000 is not equal to 24.0000?

Was ist das problem?


Mehr überraschend, ich habe ein neues Skript, das nur diese Befehle:

points = [12.0000   15.0000
          33.0000   24.0000
          33.0000   24.0000];

vertex1 = [12 ;  15];
vertex2 = [33 ;  24];

points = points((points(:,1) ~= vertex1(1)) | (points(:,2) ~= vertex1(2)), :);
points = points((points(:,1) ~= vertex2(1)) | (points(:,2) ~= vertex2(2)), :);

Das Ergebnis wie erwartet:

>> points
points =  
   Empty matrix: 0-by-2
Dies wurde auch angesprochen here
Sorry, habe ich nicht darauf aus, die Gefahren von floating-point-Vergleich, wenn Sie gefragt werden, über den Vergleich von Werten in deiner anderen Frage. Es hat nicht sofort auftreten, mir Sie vielleicht laufen, dass problem.
Als seitliche Anmerkung, vergleichen 1.2 - 0.2 - 1 == 0 und 1.2 - 1 - 0.2 == 0. Überraschend, nicht wahr? Wenn Sie den Umgang mit floating-point-zahlen, die Reihenfolge der Operationen ankommt.
Tock: Wie der Autor die Frage, konnte ich gar nicht verstehen, den Titel, den du gewählt für meine Frage. Auch ist es nicht die Tatsache widerspiegeln, dass MATLAB nicht das gesamte floating-point-Teil der Nummer, wenn Sie drucken Sie die variable.
Ich sehe. aber in der Regel setzen Sie die "duplizieren" - label auf die neuere Frage. Bitte Lesen Sie die Regeln für die doppelte Beschriftung: meta.stackexchange.com/questions/10841/...

InformationsquelleAutor Kamran Bigdely | 2009-03-26

Schreibe einen Kommentar