Entwickler-Ecke

Basistechnologien - Kein DivisionByZero mit Double?


FinalFantasy - Mo 17.10.05 14:24
Titel: Kein DivisionByZero mit Double?
Ist es normal, dass folgendes nicht zu einer DivisionByZero führt:


C#-Quelltext
1:
2:
double d = 0.0;
double k = 5 / d;


Moderiert von user profile iconraziel: Cs-Tags hinzugefügt.


raziel - Mo 17.10.05 14:53

Hallo,

jap, ist es. double kann auch die Werte +unendlich und -unendlich, genau wie in C++. Ebenso gibts noch den Wert n. def. = nicht definiert.

Gruß,
raziel


FinalFantasy - Mo 17.10.05 15:23

Wie kann ich dann auf diese Werte (unendlich, nicht definiert) prüfen?
Als Ergebnis bei einer solchen Division erhalte ich immer -2Mrd (also denke ich mal binär gesehen 32 Einser)....

Der Wert NULL eines Doubles ist aber dennoch eindeutig, oder?
Ich habe mal gelernt, dass man Double nie auf einen exakten Wert prüfen sollte, da der Speicheraufbau von Double nicht immer 100% exakte Werte speichert.
Beispielhaft kann bei 13.0 / 2.0 auch 7.4999999999999 rauskommen... eine Prüfung auf var = 7.5 würde dann ja fehlschlagen.
Wenn der Wert NULL aber eindeutig ist, warum dann keine Exception? Durch 0 teilen ist nunmal mathematisch nicht möglich.

In VB führt "geteilt durch 0.0" übrigens auch zu einem DivisionByZero.


Robert_G - Mo 17.10.05 15:42


C#-Quelltext
1:
2:
3:
4:
double result = 30.0 / 0.0;

if (result == double.PositiveInfinity)
  throw new InvalidOperationException("nix da!");

Wobei double.NegativeInfinity einfach nur - double.PositiveInfinity ist.
btw: Es gibt auch noch double.NaN -> Not a Number

Einen double auf null zu prüfen dürfte in 1.1 unmöglich und in 2.0 nur über einen Nullable<Double> gehen. ;)
Value types sind keine Refence types und somit können sie niemals null sein.


FinalFantasy - Mo 17.10.05 15:55

Mhm, wieder was gelernt! :-)
Das "0-Problem" wär mir aber wichtiger.