Negative Null bei Double Zahlen

26/02/2009 - 18:06 von box | Report spam
Hallo zusammen!!!
Ich habe ein Verhalten entdeckt was ich nicht ganz erklàren kann. Aber
zuerst die Vorgeschichte.
Double Zahlen haben zwei Arten von Null-Werten: positive Null und negative
Null.
double positiveNull = 0d;
double negativeNull = -0d;
Wenn man die zwei Werte direkt vergleicht dann sind sie gleich (was auch
praktisch ist). Um zu sehen dass es hier um verschiedene Werte handelt kann
man die bytes anschauen(die sind unterschiedich):
byte[] bs1 = BitConverter.GetBytes(positiveNull);
byte[] bs2 = BitConverter.GetBytes(negativeNull);
oder so prüfen:
double posInf = 1 / positiveNull;
double negInf = 1 / negativeNull;
Im ersten Fall gibt es positive Unendlichkeit, im zweiten - negative.
Das funktioniert alles wie man es erwartet.
Und jetzt die eigentliche FRAGE:
Wenn ich einen Double-Array mit einem Element, der negative Null ist,
initialisieren möchte, dann steckt dort plötzlich positive Null!...?
double[] a = new double[1] { -0d };
Folgende Prüfung ergibt positive Unendlichkeit:
double posInf = 1 / a[0];
Kann mir jemand erklàren wieso das so ist, und ob es hier um einen
Fehler(meinen oder von C# :) handelt?
Danke im voraus.
 

Lesen sie die antworten

#1 Frank Dzaebel
27/02/2009 - 16:56 | Warnen spam
Hallo,

bitte vollen Vor- und Zunamen als Usernamen nutzen.

[...] Wenn ich einen Double-Array mit einem Element,
der negative Null ist, initialisieren möchte, dann steckt
dort plötzlich positive Null!...?
double[] a = new double[1] { -0d };
Folgende Prüfung ergibt positive Unendlichkeit:
double posInf = 1 / a[0];



Bei mir kommt aber "-unendlich" heraus.

double[] a = new double[1] { -0d };
double negInfinity = 1 / a[0];
MessageBox.Show(negInfinity.ToString());
// ergibt: "-unendlich" bei mir
MessageBox.Show("ist unendlich: " + double.IsInfinity(
negInfinity).ToString()); // ergibt: true.
MessageBox.Show("ist unendlich: " + double.IsNegativeInfinity(
negInfinity).ToString()); // ergibt: true.
MessageBox.Show("ist unendlich: " + double.IsPositiveInfinity(
negInfinity).ToString()); // ergibt: false.

[.NET 3.5 SP1] Also exakt nach Doku:

[Double.IsNegativeInfinity-Methode (System)]
http://msdn.microsoft.com/de-de/lib...inity.aspx

Ggf. prüfe Dein .NET Framework Servicepack-Level:

[Determine the Servicepack of .NET Framework]
http://dzaebel.net/NetVersions.htm


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen