Gibt x/0 einen DevideByZero Error oder nicht?

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

Moderator: Moderatoren

Antworten
Benutzeravatar
Friedhelm
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 46
Registriert: Sa, 08. Apr 2006 17:20
Wohnort: Leverkusen
Kontaktdaten:

Gibt x/0 einen DevideByZero Error oder nicht?

Beitrag von Friedhelm »

Die Frage ist ob ein numerischer Wert durch den Wert 0 in XBase einen Laufzeitfehler erzeugt oder nicht?

Die Antwort lautet Jein!

Es hängt von dem Betriebssystem ab, auf dem das Programm mit diesem Source läuft:

Code: Alles auswählen

BEGIN SEQUENCE
   REPLACE FIELD->EPREIS WITH (FIELD->GPREIS / nFaktor)
RECOVER
   REPLACE FIELD->EPREIS WITH 0
   REPLACE FIELD->GPREIS WITH 0
END SEQUENCE
Auf 32-Bit Betriebssystem läuft das Programm auf einen Laufzeitfehler und der Recover-Block wird ausgeführt.
In einer 64-Bit Umgebung wird ein Feldüberlauf erzeugt, da kein Fehler erzeugt wird.

Nach Recherche im Debugger wird's noch komischer:
Der angezeigte Wert für eine Operation 1.55 / 0.00 wird mit 0 angezeigt. Weist man diesen Wert einer Datenfeld zu erscheint eine Fehlermeldung "Field length exceeded"

Hat jemand von Euch einer Erklärung für dieses Phänomen?
Gruß Friedhelm
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2824
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: Gibt x/0 einen DevideByZero Error oder nicht?

Beitrag von georg »

Hallo, Friedhelm -


hast Du einmal hier geschaut?

http://www.xbaseforum.de/viewtopic.php?f=27&t=6853
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
Herbert
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1991
Registriert: Do, 14. Aug 2008 0:22
Wohnort: Gmunden am Traunsee, Österreich
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Gibt x/0 einen DevideByZero Error oder nicht?

Beitrag von Herbert »

Ein interessantes Thema.
Durch 0 dividieren bedetuet ein Ergebnis, welches ins Unendliche führt. Das führt zu einem Ueberlauf, was in einer Exception abgefangen wird.
Die CPU, also die Hardware reklamiert in solchen Fällen. Was die betreffende Software, vor allem auch das Betriebssystem damit macht, ist eine andere Sache. Offenbar wird unter Windows 8 eine sog. NaN und nicht eine Exception herausgegeben. Ein Nan ist keine Zahl, sondern ein unbestimmter Wert. Kann auch als leerer String erscheinen. Ein Compiler kann daraus wieder eine 0 definieren, was methematisch gesehen ein Unsinn ist, aber im Programm zu keinem Absturz führt.

Basis bildet dazu die IEEE754, welche die Darstellungen der Gleitkommazahlen in Computern und deren Durchführungen festlegt.
http://de.wikipedia.org/wiki/IEEE_754

Wer Englisch versteht, kann hier interessantes nachlesen.
http://www.codeproject.com/Questions/82 ... -exception.
Es scheint sogar Unterschiede zu geben zwischen den verschiedenen lokalen Eistellungen in Windows...
Grüsse Herbert
Immer in Bewegung...
Antworten