Aber was ich mich gefragt habe, ist, ob der Computer überhaupt versucht, durch Null zu teilen, oder ob er nur "eingebauten Schutz" hat, so dass er, wenn er "0/0" sieht, einen Fehler zurückgibt, noch bevor er versucht, ihn zu berechnen?
Da x/0
der Punkt keinen Sinn ergibt, müssen Computer immer auf Division durch Null prüfen. Hier gibt es ein Problem: Programmierer wollen rechnen, (a+b)/c
ohne prüfen zu müssen, ob diese Berechnung überhaupt Sinn macht. Die Reaktion unter der Haube auf die Division durch Null durch CPU + Zahlentyp + Betriebssystem + Sprache besteht darin, entweder etwas ziemlich drastisches zu tun (z. B. das Programm zum Absturz zu bringen) oder etwas übermäßig Gutes zu tun (z. B. einen Wert zu erstellen, der Nein ergibt Sinn wie der IEEE-Gleitkommawert NaN
, eine Zahl, die "keine Zahl" ist).
In einer gewöhnlichen Umgebung muss ein Programmierer wissen, ob dies (a+b)/c
sinnvoll ist. In diesem Zusammenhang gibt es keinen Grund, die Division durch Null zu überprüfen. Wenn eine Division durch Null auftritt und die Maschinensprache + die Implementierungssprache + der Datentyp + das Betriebssystem darauf reagieren, um das Programm zum Absturz zu bringen, ist das in Ordnung. Wenn die Antwort darin besteht, einen Wert zu erstellen, der eventuell jede Zahl im Programm verschmutzt, ist das auch in Ordnung.
Weder "etwas Drastisches" noch "übermäßig Gutes" ist in der Welt des Hochzuverlässigkeits-Computing das Richtige. Diese Standardantworten können einen Patienten töten, ein Verkehrsflugzeug zum Absturz bringen oder eine Bombe am falschen Ort explodieren lassen. In einer hochzuverlässigen Umgebung wird ein Programmierer, der schreibt (a+b)/c
, während der Codeüberprüfung oder in der heutigen Zeit von einem Tool, das nach verbotenen Konstrukten sucht, automatisch zu Tode gerissen. In dieser Umgebung sollte der Programmierer stattdessen etwas in der Art geschrieben haben div(add(a,b),c)
(und möglicherweise nach dem Fehlerstatus suchen). Unter der Haube schützen die div
(und auch die add
) Funktionen / Makros vor einer Division durch Null (oder einem Überlauf bei add
). Was dieser Schutz beinhaltet, ist sehr umsetzungsspezifisch.