EInvalidOp bei asin()



  • Hi.

    Ich möchte ein Projekt aus VisualC++6 in CBuilder5pro umsetzen und hänge jetzt bei einer Berechnung fest.

    wvec=asin((swpx-ffx0)/lvec);
    

    In CBuilder sagt er mir für diese Zeile über MessageBox "EInvalidOp." und beendet das Programm. In den Werten steht überall eine 0. Wenn ich jedoch die Variablen mit einer 0 fest ersetze, dann geht er das Programm ohne Absturz durch, meckert nur beim compilieren natürlich das "Division durch 0" ist.

    Ist das ein Bug? Kann man den fixen? 😕



  • Invalider schrieb:

    In CBuilder sagt er mir für diese Zeile über MessageBox "EInvalidOp." und beendet das Programm.

    Das ist eine Exception, die kannst du mit try/catch abfangen. Beispiele dafür gibt es hier haufenweise.
    Und wundere dich nicht: beim Start aus der IDE heraus wird die Meldung trotzdem angezeigt, das soll so.



  • Invalider schrieb:

    wvec=asin((swpx-ffx0)/lvec);
    

    In CBuilder sagt er mir für diese Zeile über MessageBox "EInvalidOp." und beendet das Programm. In den Werten steht überall eine 0.

    Auch in 'lvec'? Wenn ja, holst du dir da den ArcSin von 0/0 (und das ist undefiniert).

    Wenn ich jedoch die Variablen mit einer 0 fest ersetze, dann geht er das Programm ohne Absturz durch, meckert nur beim compilieren natürlich das "Division durch 0" ist.

    Diese "Division durch 0" hast du auch bei der Variante mit Variablen - nur macht sie sich etwas anders bemerkbar.

    Ist das ein Bug? Kann man den fixen? 😕

    Ja, es ist ein Bug in deinem Code - zur Lösung müsstest du den Fall 'lvec==0' gesondert betrachten.



  • Das ist mir schon verständlich. Der Code ist nicht von mir. Ich will lediglich ne GUI drumbasteln und in VisualC arbeitet der Code (scheinbar) fehlerfrei. Zumindest gibt es dort keinerlei Abstürze.

    Puh, das etwas hart jetzt kompletten Berechnungscode durchgehen zu müssen und bei allen Divisionen 0 extra zu behandeln. Das es 0 zurückgeben soll, kann man wohl nicht irgendwie festlegen oder? try/catch ist keine option, er soll ja mit 0 arbeiten.


Anmelden zum Antworten