"Strategie" bei Division durch Null



  • Ich habe eine allgemien frage die man mt divivion durch 0 umgehen soll.
    in einer Klassenbibliothek habe ich die Division komplexer Zahlern so geschrieben:

    public static complex operator /(complex z1, complex z2)
            {
                complex e;
                e = z1 * z2.inv();
                return (e);
            }
    

    dieses Bibliothek wird aber weiter verwendet, sodass bei z2=0 ein Fehler auftritt der sich dann fortsetzt.Wie verhindert man sowas, so dass das Problem nicht noch schlimmer wird?



  • DivideByZeroException



  • realistic steak schrieb:

    DivideByZeroException

    Joa und was machen wir dann mit der Exception?
    Lieber garnicht erst soweit kommen lassen und vorher auf Null prüfen.


  • Mod

    CreativeLabs schrieb:

    realistic steak schrieb:

    DivideByZeroException

    Joa und was machen wir dann mit der Exception?
    Lieber garnicht erst soweit kommen lassen und vorher auf Null prüfen.

    Und was machst du, wenn du bei der Prüfung eine Null gefunden hast? Eine Exception werfen?



  • SeppJ schrieb:

    CreativeLabs schrieb:

    realistic steak schrieb:

    DivideByZeroException

    Joa und was machen wir dann mit der Exception?
    Lieber garnicht erst soweit kommen lassen und vorher auf Null prüfen.

    Und was machst du, wenn du bei der Prüfung eine Null gefunden hast? Eine Exception werfen?

    Kommt auf die Situation an. Woher kommt die Null? Von einer Benutzereingabe?

    Wenn ich die Wahl habe es vorher zu prüfen, oder die Anwendung in eine Exception laufen zu lassen, dann ist ersteres für mich der saubere Weg.

    Exceptions passen besser, wenn eine Prüfung ausgeschlossen oder nicht zuverlässig ist. Z.B. FileNotFoundException. Ich kann zwar vorher prüfen ob die Datei existiert, wenn sie aber im Moment danach gelöscht wird bleibt nur noch die Exception.



  • zahlenfreund schrieb:

    Ich habe eine allgemien frage die man mt divivion durch 0 umgehen soll.

    Man verwendet Algorithmen bei denen Division durch 0 nicht vorkommen kann.
    D.h. wo immer man was ausrechnet wobei es zu einer Division durch 0 kommen könnte braucht man einen alternativen Pfad der anders rechnet.

    Auf unterster Ebene kann man es nicht abfangen, da das Ergebnis eben undefiniert ist. Ginge es, dann wäre da sicher schon jmd. draufgekommen, und Generationen von Mathermatikern hätten sich nicht sinnlos mit dem Problem rumgeschlagen.



  • hustbaer schrieb:

    Auf unterster Ebene kann man es nicht abfangen, da das Ergebnis eben undefiniert ist. Ginge es, dann wäre da sicher schon jmd. draufgekommen, und Generationen von Mathermatikern hätten sich nicht sinnlos mit dem Problem rumgeschlagen.

    Die Lösung heisst NAN. Wenn unser Zahlenfreund floats/doubles verwendet, ist keine Exception notwendig.



  • Auf unterster Ebene kann man es nicht abfangen, da das Ergebnis eben undefiniert ist.

    Kommt drauf an was die "unterste Ebene" ist. Die unterste Ebene in einem Computer ist Assembler, und auch dort wird (vom Prozessor) eine Exception geworfen.

    Und auch wenn float/double verwendet wird wäre eine Exception sinnvoll, dann weiß man wenigstens recht genau was schieflief.
    Ist vermutlich Geschmackssache, aber ich hasse es wenn Programme bei Fehlern einfach weiterlaufen und man nicht weiß was los ist.



  • @regeneration & DarkShadow44
    Ja, klar, NaN bzw. Exception werfen sind sinnvolle Möglichkeiten den Fehler zu signalisieren.
    Aber nicht ihn zu behandeln.

    Ich glaube ich hab' die Frage falsch verstanden. Vermutlich wollte zahlenfreund wirklich nur wissen wie er den Fehler signalisieren kann. Für mich hatte es sich erst so gelesen, als sei er der Meinung dass man da irgendwas machen könnte, so dass der Code der seine Funktion aufruft trotzdem "sinnvoll" weiterrechnen kann, und zu einem "sinnvollen" Ergebnis kommt.

    Was natürlich nicht geht.

    Ausser man sähe "NaN" als "sinnvolles" Ergebnis an.
    Was es manchmal ist, aber nicht immer. Es gibt ja durchaus einige Dinge die man auf verschiedene Arten berechnen kann, wobei bei einer Art ne Division durch Null rauskommt und bei ne anderen nicht.
    z.B. wird man Probleme bekommen, wenn man versucht den Abstand zweier paralleler Geraden zu berechnen, indem man das Verfahren für windschiefe Geraden anwendet. Dabei kreuzt man dann zwei richtungsgleiche Vektoren, und dass dabei nix sinnvolles rauskommt sollte klar sein.
    Mit 'nem anderen Verfahren kann man aber ein - vollkommen sinnvolles und korrektes - Ergebnis errechnen.



  • Diese Zeile stammt aus einer Klassenbibliothek, die ich allgemien einsetzen will. In diesem Fall aber für Numerikprogamm. Bisher habe ich immer im solchen Fällen immer eine Messagebox mit Fhlermedung ausgegeben. Das Ergebniss dieser Division aber wohl weiter verwendet.Wäre es da sinnsoll gleich zu anfang einen Fehlermeldung raus zu geben und erst am Schluss, des möglcherweise langen Rechenprozesses?


Anmelden zum Antworten