Hallo,
Ich habe mal eine - vielleicht recht doofe - Frage.
Kurz zu Erklärung: Seit Wochen arbeite ich an einem Simulationsprojekt in Java. Die Agenten haben verschiedene Basisbewegungsoperationen: Zufall, Fliehe, GeheZu usw.
Bei der Flucht hatte ich nun eine Kleinigkeit übersehen. Wenn der Agent die gleiche Position besetzt, wie der Agent, vor dem er fliehen möchte, kommt es in der Vektorrechnung zu einem Fehler: Ein Richtungsvektor kann nicht bestimmt werden. Das Endergebnis ist, dass der entsprechende Agent die Position (NaN / NaN) einnimmt.
Der Fehler selbst war leicht zu beheben.
Was ich mich jetzt aber frage: Wieso kann Java damit weiter arbeiten?
Trotz dieser Werte lief die Simulation 'normal' weiter. Ich habe den Fehler erst festgestellt, als eine Abbruchbedingung nicht erfüllt werden konnte, obwohl sie längst fällig gewesen wäre.
In der Zwischenzeit wurde mit diesen Koordinaten mehrere If-Bedingungen durchlaufen - alles vergleichende Operationen wie '<' '<=' '==' usw. . Zudem wurden die NaN mehrfach zur Berechnung neuer Positionen verwendet (im Wesentlichen Addition, Subtraktion und Multiplikation)
Mich wundert jetzt einfach, dass keine dieser Operationen eine Exception oder einen großen Fehler verursacht hat. Das hat die Fehlersuche deutlich erschwert^^
Warum lässt Java Vergleiche und sogar mathematische Operationen mit diesem Wert zu? Hat das irgendwo eine praktische Anwendung?
Bitte nicht falsch verstehen: Das soll weder eine Kritik an der Sprache, noch sinnloses Gejammer werden. Mein Problem ist ja abgefangen. Mir geht es mir mehr um das Verständnis für diese Mechanik und warum da keine Exception greift. Ich meine, durch eine Exception werde ich auf das Problem aufmerksam und kann es entweder direkt beheben oder eine Lösung über einen Catch-Block entwickeln. So aber kann es ja zu ungewolltem Verhalten führen, dass man vielleicht gar nicht bemerkt.
Ich habe mal eine - vielleicht recht doofe - Frage.
Kurz zu Erklärung: Seit Wochen arbeite ich an einem Simulationsprojekt in Java. Die Agenten haben verschiedene Basisbewegungsoperationen: Zufall, Fliehe, GeheZu usw.
Bei der Flucht hatte ich nun eine Kleinigkeit übersehen. Wenn der Agent die gleiche Position besetzt, wie der Agent, vor dem er fliehen möchte, kommt es in der Vektorrechnung zu einem Fehler: Ein Richtungsvektor kann nicht bestimmt werden. Das Endergebnis ist, dass der entsprechende Agent die Position (NaN / NaN) einnimmt.
Der Fehler selbst war leicht zu beheben.
Was ich mich jetzt aber frage: Wieso kann Java damit weiter arbeiten?
Trotz dieser Werte lief die Simulation 'normal' weiter. Ich habe den Fehler erst festgestellt, als eine Abbruchbedingung nicht erfüllt werden konnte, obwohl sie längst fällig gewesen wäre.
In der Zwischenzeit wurde mit diesen Koordinaten mehrere If-Bedingungen durchlaufen - alles vergleichende Operationen wie '<' '<=' '==' usw. . Zudem wurden die NaN mehrfach zur Berechnung neuer Positionen verwendet (im Wesentlichen Addition, Subtraktion und Multiplikation)
Mich wundert jetzt einfach, dass keine dieser Operationen eine Exception oder einen großen Fehler verursacht hat. Das hat die Fehlersuche deutlich erschwert^^
Warum lässt Java Vergleiche und sogar mathematische Operationen mit diesem Wert zu? Hat das irgendwo eine praktische Anwendung?
Bitte nicht falsch verstehen: Das soll weder eine Kritik an der Sprache, noch sinnloses Gejammer werden. Mein Problem ist ja abgefangen. Mir geht es mir mehr um das Verständnis für diese Mechanik und warum da keine Exception greift. Ich meine, durch eine Exception werde ich auf das Problem aufmerksam und kann es entweder direkt beheben oder eine Lösung über einen Catch-Block entwickeln. So aber kann es ja zu ungewolltem Verhalten führen, dass man vielleicht gar nicht bemerkt.