Bascom durch "0" dividieren

#1194587
Lesenswert?

Morgen zusammen,

Was passiert bei einem z.B. ATMEGA32, wenn ich durch "0" teile oder eine 
Zahl durch "0" teile? Kann es sein dass sich der µC aufhängt? Habe im 
Moment ein ähnliches Problem, kann aber grad leider nicht testen, wie 
sich der µC verhält.

Mfg Mel
Gast #1194763
Lesenswert?

@Kai, war zu langsam, wollt' auch gerade den Auzug aus der Bascom Hilfe 
posten :D

@sirmel,
ist doch eigentlich selbstverständlich daß man im Code sicherstellt, daß 
so etwas nicht passiert. Was soll den der µC sonst machen ? Errorhandler 
aufrufen, rot glühen oder eine Messagebox mit Division by Zero Meldung 
mit Buttons Ja, Nein, Vielleicht anzeigen ?
#1194776
Lesenswert?

Er könnte den Fehler stillschweigendd ignorieren oder man könnte ihm 
(wie ich es von Basic kenne) mit einem
1
On Error Resume Next
2
oder
3
On Error Goto AllesKaputt
einen Hinweis geben, was im Fehlerfall zu tun ist - ähnlich einer 
Exception.

Aber die Doku ist, was die Fehlerbehandlung angeht extrem mies.

Im einfachen Fall von Division durch null, ist aber eine Prüfung durch 
den Entwickler wirklich nicht zu viel verlangt.
Gast #1194850
Lesenswert?

> unter den vielen Textergüssen

Lies die "Textergüsse" bitte in zwei Jahren (mit etwas mehr MC-Wissen) 
nochmal, dann wirst Du feststellen, dass die sehr konstruktiv sind. 
Alternativ hätte man es Dir auch sehr direkt sagen können, dies wiederum 
hättest Du aber als Beleidigung auffassen können. Also: Humor 
einschalten, mal über sich selbst lachen, Schlüsse draus ziehen und gut. 
;-)

...
#1194927
Lesenswert?

Wo fehlt denn der Humor? Hätte auch blöd rumpampen können...was mir 
letzendlich nicht weitergebracht hätte=). Für mich ist die Bezeichung 
"Textergüsse" schon humorvoll genug. Direkt sagen ist vllt besser 
angebracht...ich jedenfalls versuche präzise Antworten zu geben und mich 
dabei nicht über den Fragenden lustig zu machen, auch wenn die Fragen 
manchmal etwas banal sind :).
Gast #1194976
Lesenswert?

>Wieder was dazugelernt..

Nein

Du hast recht. Das Zeroflag wird gesetzt, wenn bei einer Berechnung Null 
als Ergebnis herauskommt.

Mit Berechnung ist allerdings eine mathematische/logische Operation 
der ALU gemeint. Dazu gehört allerdings nicht die Division! Sondern 
nur die Befehle, die in der Instruction summary im Datenblatt stehen.
Gast #1194994
Lesenswert?

@sirmel,

zum Glück ist das kein Forum, bei dem Lachen im Keller angesagt ist, und 
würdest Du "rumpampen", ginge natürlich die Bereitschaft der anderen 
Forumsteilnehmer Dir zu helfen gegen Null. Div / 0 ? :-)

Ein bisserl hast Du sicher um diesen Art Humor gebettelt, denn a) würde 
man durch bloßes Nachdenken drauf kommen, und b) steht die Antwort in 
der Bascom Hilfe. Zwar nicht besonders ausführlich, aber dennoch 
ausreichend deutlich.

Die Fließkomma Routine zu debuggen war mir im Monment zu aufwändig, aber 
immerhin hab' ich die Int Division im Disassembler mal angeschaut, die 
produziert zwar nix Gescheites, hängt sich aber auch nicht auf, wenn 
Divisor = 0 ist.
#1195128
Lesenswert?

Der Regelfall wird wohl sein, vor der Division den Divisior auf 0 zu 
testen.
In der zb. Grafikprogrammierung hat eine versuchte Division durch 0 fast 
immer irgendeinen geometrischen Sonderfall zur Ursache.

Bsp: Der Schnittpunkt zweier (unendlichen Geraden) ergibt sich durch

     (ax-bx)*nby - (ay-by)*nbx
t = ----------------------------
        nay*nbx - nax*nby

Ist der Divisor gleich 0, sind die beiden Geraden parallel und es 
existiert kein Schnittpunkt. Nun kommt es aber insbesondere durch Rechen 
und Rundungungenauigkeiten oft vor, dass der Divisor nicht exakt gleich 
0 sondern eine sehr kleine Zahl ergibt. In so einem Fall werden auch 
Ergebnisse kleiner als ein gewisses Epsilon als 0 gewertet. Für so gut 
wie alle praktischen Zwecke ist ein 5 Lichtjahre entfernter Schnittpunkt 
gleichbedeutend mit 'kein Schnittpunkt'.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren