Hi, was macht ein Mikrocontroller, wenn man durch Null teilt? Der Controller hängt sich dabei nicht auf, aber was berechnet er dabei? mfg
:
Verschoben durch User
Nullteiler schrieb: > Der Controller hängt sich dabei nicht auf, aber was berechnet er dabei? Käse. > was macht ein Mikrocontroller Welcher denn?
Steht im Datenblatt bzw. Programing Reference Manual. Manche CPUs werfen eine Exception bzw. bei manchen DSPs kann man konfigurieren ob ein Sättigung bei Überlauf eintreten soll. Manche Fließkommaeinheiten reagieren mit NAN (Not A Number weil theoretisch Unendlich bzw. nicht definiert).
Für IEEE 754 Gleitkommazahlen gibt es eine klare Antwort. Die Library muss +Unendlich liefern.
Nullteiler schrieb: > was macht ein Mikrocontroller, wenn man durch Null teilt? Er explodiert mit einem gleißenden Lichtblitz und die darauf folgende Aschewolke verhüllt für Jahre die Sonne. Wegen so etwas sind damals auch die Dinos ausgestorben.
Bei uns ist auch letztens die ganze Firma abgebrannt, weil irgendein Trottel unserer Programmierer einen uC durch 0 hat teilen lassen...
Rüdiger schrieb: > Er explodiert mit einem gleißenden Lichtblitz und die darauf folgende > Aschewolke verhüllt für Jahre die Sonne. Wegen so etwas sind damals auch > die Dinos ausgestorben. hoffentlich sterben leute die so unqualifiziert antworten bald aus ....
dolf schrieb: > Rüdiger schrieb: >> Er explodiert mit einem gleißenden Lichtblitz und die darauf folgende >> Aschewolke verhüllt für Jahre die Sonne. Wegen so etwas sind damals auch >> die Dinos ausgestorben. > > hoffentlich sterben leute die so unqualifiziert antworten bald aus .... Ich fand die Antwort super :-)
Wer solche Fragen stellt und sich nicht selbst informieren kann oder will (Datenblätterlesen soll ja durchaus kein Geheimnis sein), muß auch mit solchen Antworten rechnen. Ich fand sie ebenfalls klasse. Früher gabs Arithmetik-Co-Prozssoren mit Metallkappen. Wahrscheinlich war genau diese Division der Grund dafür. So wurden die Schäden wohl minimiert.
chick schrieb: > Früher gabs Arithmetik-Co-Prozssoren mit Metallkappen. Wahrscheinlich > war genau diese Division der Grund dafür. So wurden die Schäden wohl > minimiert. Das waren Wartungsklappen. Wenn durch eine Null-Division etwas verloren ging, konnte man die Klappe öffnen und die Daten wieder reinsetzen. mfg.
chick schrieb: > Früher gabs Arithmetik-Co-Prozssoren mit Metallkappen. Wahrscheinlich > war genau diese Division der Grund dafür. So wurden die Schäden wohl > minimiert. Durch herumfliegende Schrapnells? ;-)
Wenn man dem µC ein Handy spendiert, kann der ja mal bei diesem Chuck Norris anrufen..
M. B. schrieb: > Durch herumfliegende Schrapnells? ;-) Knall und Metall gibt Blut überall! Sieht so aus als wäre die Sauerstoff- und Koffeinkonzentration heute nachmittag schon böse im Keller.
chick schrieb: > Wer solche Fragen stellt und sich nicht selbst informieren kann oder > will (Datenblätterlesen soll ja durchaus kein Geheimnis sein), muß auch > mit solchen Antworten rechnen. Da die wenigsten Mikrocontroller über einen Divisionsbefehl verfügen, führt das Lesen des Datenblatts nicht unbedingt zum Ziel. Stattdessen sollte man sich die die Dokumentation der verwendeten Laufzeitbibliothek zu Gemüte führen. Falls es aber um C-Programmierung geht, führt auch das nicht unbedingt zum Ziel, da in C bei der Integerdivision durch Null das Verhalten "undefined¹" (und nicht etwa "implementation defined") ist. Die Nulldivision ist also in C auf jeden Fall zu vermeiden, und es besteht kein Anspruch darauf, dass dieses Verhalten dokumentiert sein muss. Bei Open-Source-Libraries kann man natürlich selber nachschauen, wenn einen das wirklich interessiert. ¹) "undefined behavior" ist wörtlich zu nehmen und schließt prinzipiell auch die Explosion des Mikrocontrollers nicht aus ;-)
Reinhard S. schrieb: > Chuck Norris kann durch 0 teilen! php auch (mit ein bisschen glück gibts eine warning, sonst nichts)
Ja, google hilft weiter: http://www.google.com/search?q=divide+by+zero&hl=de&client=firefox-a&hs=5S0&rls=org.mozilla:de:official&prmd=imvns&source=lnms&tbm=isch&ei=gqh0T8HgF83Y4QSE-KyFDg&sa=X&oi=mode_link&ct=mode&cd=2&ved=0CBIQ_AUoAQ&biw=1680&bih=907
Kein Name schrieb im Beitrag #2614207 > Für IEEE 754 Gleitkommazahlen gibt es eine klare Antwort. > > Die Library muss +Unendlich liefern. Sicher? Ich meine, die sollte NaN liefern. +unendlich halte ich für sehr schlecht weil in 50% der Fälle kreuzfalsch.
Man hat es bereits ausprobiert :-D http://www.roboternetz.de/community/threads/55218-Mit-AVR-durch-0-teilen-! Irgendwas/0 ergibt "unendlich", soweit das der µC halt darstellen kann (sprich alle Bits sind high) 0/0 = 0
Simon S. schrieb: > Man hat es bereits ausprobiert :-D Woher weißt du, dass es hier im Thread ebenfalls um einen AVR geht? BTW: es stimmt mich nachdenklich, wenn dort im Link ein
1 | Erfahrener Benutzer |
und
1 | Roboter Experte |
diese Frage für sich selbst noch nicht beantwortet hat:
1 | Ist es überhaupt möglich einen AVR so zu "belasten" dass er heiß wird? |
Yalu X. schrieb: > ¹) "undefined behavior" ist wörtlich zu nehmen und schließt prinzipiell > auch die Explosion des Mikrocontrollers nicht aus ;-) Nein, lieber Moderator! Der Prozessor darf ausschließlich dann explodieren, wenn "darf nicht durch 0 dividieren" in den Absoluten Grenzwerten des Datenblatts aufgeführt ist. Bernhard
Bernhard R. schrieb: > Der Prozessor darf ausschließlich dann explodieren, wenn "darf nicht > durch 0 dividieren" in den Absoluten Grenzwerten des Datenblatts > aufgeführt ist. Nein. Das C-Laufzeitsystem darf die Division durch 0 auch erkennen und selbst dann, wenn der Prozessor einen Divisionsbefehl hat, diesen dann gar nicht erst ausführen, sondern stattdessen den Befehl HCF. :-)
Die US-Navy hats im letzten Jahrtausend schon praktisch getestet: http://www.google.de/#hl=de&site=&source=hp&q=uss+yorktown+divide+by+zero&oq=uss+yorktown+divide+by+zero&aq=f&aqi=g1&aql=&gs_l=hp.3..0.1616l1616l0l2758l1l1l0l0l0l0l191l191l0j1l1l0.frgbld.&bav=on.2,or.r_gc.r_pw.,cf.osb&fp=473ed68e5404e299&biw=1680&bih=896 Arno
Reinhard S. schrieb: > Chuck Norris kann durch 0 teilen! Kunststück, Chuck Norris zählte auch schon bis unendlich. 2 mal! gruß cyblord
ob chuck norris es geschafft hat unendlich durch 0 zu teilen bevor er wieder angefangen hat zu zählen ist leider nicht bekannt. vermutlich war es nicht allzu schwierig, sonst hätte er es nicht zweimal gemacht...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.