Divison durch 0

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Antworten
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21192
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Divison durch 0

Beitrag von Manfred »

Hi,

ich habe gerade eine interessante Entdeckung gemacht, die zwar nicht weltbewegend ist, aber mich doch ein wenig verwundert hat. Ich hatte im Programm eine Stelle, an der eine Divison durch 0 auftritt. Das Interessante war, das ich es anfangs gar nicht bemerkt hatte, aber immer wieder verwundert war, warum an dieser Stelle ein "merkwürdiges" Verhalten auftrat. Nachdem ich durch Zufall die Stelle im VX Debugger laufen ließ, stellte ich dann fest, dass der Fehler registriert, also dass die Errorsys aufgerufen wurde, aber mit einem RETURN 0 zurückgeschickt und somit der weitere Ablauf der Methode abgebrochen wurde. Das Programm sprang wieder zum vorhergegangenen Programmabschnitt zurück und tat so, als wenn nichts gewesen wäre.
Ist das eigentlich korrekt so? Als ich mir den Quellcode der Errorsys ansah, war es klar, aber ich habe vorher nicht daran gedacht, das der Fehler "so" abgefangen wird.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16516
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Manfred,
ich meine mich dunkel zu erinnern, dass dies mal vor einiger Zeit Thema in den Newsgroups war!
Soweit ich mich erinnere, wurde der Fehler entsprechend unter Clipper abgefangen, so dass dieses Verhalten auch unter Xbase++ nachgebildet wurde.

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21192
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

Hi Martin,

naja, das es abgefangen wird ist schön, aber das es dann einen Rücksprung gibt, der den Rest komplett ignoriert? In dem Falle ist es aufgefallen, weil Bildschirmanzeigen fehlten, aber was mache ich, wenn ich eine komplexere Rechnung habe, die dann irgendwie Müll auswirft?
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16516
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Manfred,
wie gesagt: das Verhalten war unter Clipper genauso und wurde auf vielfachen Wunsch somit auch unter Xbase++ nachgezogen (wenn mich meine grauen Zellen nicht im Stich lassen...)

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21192
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

Hi Martin,

ich habe jetzt mal das Return 0 gegen RETURN ausgetauscht. Dann springt die Errorsys richtig an und macht zumindest die Fehlermeldung, (ich habe etwas mit Transform gemacht) das der Parameter einen falschen Typ hat.

Mal sehen, was man da insgesamt ändern kann.

Also ich bin der Meinung eine Divison durch 0 sollte man nicht so einfach ignorieren. Vielleicht sollte man sich anschauen, wo sowas vorkommen kann und dann entsprechende Abfragen vorher einbauen. Aber eine Meldung sollte schon kommen.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15696
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hallo Manfred,

das richtige Verhalten wäre, dass eine Fehlermeldung erscheint :

'Division durch 0 wurde von Programmierer nicht abgefangen, Programm wird beendet.' Wäre dir das lieber ? :wink:

Schon zu Clipperzeiten wurde darüber diskutiert. Die einzige richtige Antwort darauf ist, dass es NIE vorkommen darf, dass ein Teiler 0 wird. Du must im Programm Plausis setzen, dass die Teiler immer mit gültigen Werten gefüllt werden !

Division durch 0 gibt nunmal unendlich und ist deshalb verboten, wie soll da eine allgemeine Fehlerbehandlungsroutine den Fehler beheben ?
Gruß
Hubert
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21192
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

Neeeeee Hubert,

ich glaube jetzt reden wir aneinander vorbei. Es gibt ja auch Testphasen, die vom Programmierer durchlaufen werden sollten. Dabei sollte sowas halt irgendwie auffallen.

Die Meldung, die Du vorschlägst, ist nicht gerade geeignet für den Benutzer....

Aber lange Rede kurzer Sinn, ich war überrascht, wie es abgefangen wird. Irgendwie habe ich mir aber auch keine nennenswerten Gedanken bisher darüber gemacht, aber Du kannst davon ausgehen, dass dieser Vorfall mich jetzt in die Richtung schiebt Sicherheitsabfragen einzubauen....
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15696
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Manfred hat geschrieben: Es gibt ja auch Testphasen, die vom Programmierer durchlaufen werden sollten. Dabei sollte sowas halt irgendwie auffallen..
Da liegt das Problem, da immer alles schiefgeht und auch noch dann wenn man es nicht braucht, ist die Wahrscheinlichkeit groß, dass du beim Testen nie einen Fehler erhälst, da du ja die Werte gültig eingibst.
Und beim ersten Anwender (DAU möchte ich den jetzt nicht nennen) kommt es zu der Division durch 0 und es kommt zum Fehler ...

Die einzige Möglichkeit das richtig zu verhindern, ist im Programm immer die Vorabprüfung einzubauen wo auch immer so ein Problem auftreten kann.

Was aber eventuell deinem Wunsch entsprechen würde, wäre folgende Zeile in der Fehlerbehandlung:

statt

RETURN 0

einfach

#ifdef DEBUG
Fehermeldung ...
#else
RETURN 0 // oder was du willst
#endif

Nun würde der DEBUG Zustand (diesen blende ich übrigens ähnlich bei mir in der TITEL-Leiste ein) automatisch das Verhalten steuern.
Gruß
Hubert
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21192
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

Was aber eventuell deinem Wunsch entsprechen würde, wäre folgende Zeile in der Fehlerbehandlung:

statt

RETURN 0

einfach

#ifdef DEBUG
Fehermeldung ...
#else
RETURN 0 // oder was du willst
#endif
Das ist ne Idee, daran habe ich jetzt gar nicht gedacht. Es reicht mir da und dort ein ALtd() einzubauen.
Nun würde der DEBUG Zustand (diesen blende ich übrigens ähnlich bei mir in der TITEL-Leiste ein) automatisch das Verhalten steuern.
Das habe ich jetzt nicht verstanden. Was blendest Du wie in der Titelleiste ein?
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15696
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hallo Manfred,

ich habe einige Male aus Versehen Programme mit DEBUG=ON ausgeliefert, bis ich folgendes gemacht habe:

Code: Alles auswählen

#ifdef DEBUG
   oWin:title := cTitel+"   *** DEBUG ***"
#else
   oWin:title := cTitel
#endif
seither ist es mir nichtmehr passiert :D
Gruß
Hubert
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21192
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

brandelh hat geschrieben:Hallo Manfred,

ich habe einige Male aus Versehen Programme mit DEBUG=ON ausgeliefert, bis ich folgendes gemacht habe:

Code: Alles auswählen

#ifdef DEBUG
   oWin:title := cTitel+"   *** DEBUG ***"
#else
   oWin:title := cTitel
#endif
seither ist es mir nichtmehr passiert :D
Aaach so,
siehst Du, an so etwas denke ich gar nicht. Es geht nichts über eine gute Community....
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15696
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Die Gedächtnisleistung einer Biene reicht einige Stunden, die des gesamten Bienenvolkes mehrere Monate (frei wiedergegeben aus einem Tierfilm), der Schwarm macht stark.

Darum profitieren auch wirklich alle aus einem solchen Forum. :!:
Gruß
Hubert
Antworten