Autor Beitrag
FinalFantasy
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 127

Windows XP
Delphi 5 Professional, Visual Studio 7 .NET (C#)
BeitragVerfasst: Mo 17.10.05 14:24 
Ist es normal, dass folgendes nicht zu einer DivisionByZero führt:

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


Moderiert von user profile iconraziel: Cs-Tags hinzugefügt.
raziel
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2453

Arch Linux
JS (WebStorm), C#, C++/CLI, C++ (VS2013)
BeitragVerfasst: 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

_________________
JSXGraph
FinalFantasy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 127

Windows XP
Delphi 5 Professional, Visual Studio 7 .NET (C#)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 416


Delphi32 (D2005 PE); Chrome/C# (VS2003 E/A, VS2005)
BeitragVerfasst: Mo 17.10.05 15:42 
ausblenden 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.


Zuletzt bearbeitet von Robert_G am Di 01.11.05 02:26, insgesamt 1-mal bearbeitet
FinalFantasy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 127

Windows XP
Delphi 5 Professional, Visual Studio 7 .NET (C#)
BeitragVerfasst: Mo 17.10.05 15:55 
Mhm, wieder was gelernt! :-)
Das "0-Problem" wär mir aber wichtiger.