Double.POSITIVE_INFINITY == Float.POSITIVE_INFINITY

8

Ich habe es versucht

%Vor%

und die Ausgabe war

%Vor%

Das heißt also, "Infinity" ist für beide Datentypen gleich?

    
user113454 10.04.2012, 05:10
quelle

4 Antworten

8

Ja und nein. Ja, denn in einem abstrakten Sinn ist die Unendlichkeit die Unendlichkeit (und, wie ich unten erläutere, werden für die meisten Code-Gleitkommazahlen sowieso in Doppel umgewandelt).

Nein, denn auf der Bit-Ebene sind die beiden Unendlichkeiten verschieden. Ein Double ist 64 Bit in Java und ein Float ist 32 Bit in Java, so trivial sind sie auf der Darstellungsebene unterschiedlich.

In Java werden Fließkommazahlen (floats und doubles) mit IEEE 754 Gleitkommaformat dargestellt ist der Standard, den heutzutage fast jeder benutzt. Jede Zahl wird als Vorzeichenbit in Binärform dargestellt, zuzüglich einer bestimmten Anzahl von Exponentenbits plus einer bestimmten Anzahl von Mantissenbits (Signifikanden). In einem Float oder einem Double wird positive Unendlichkeit mit einem Vorzeichenbit von 0, Exponentenbits alle 1 und Mantissenbits alle 0 dargestellt. Negative Unendlichkeit wird auf die gleiche Weise dargestellt, außer dass das Vorzeichenbit 1 ist zwei sehr ähnliche Wege, aber wegen der unterschiedlichen Anzahl von Exponenten und Mantissen zwischen Floats und Doubles unterscheiden sich die Bitlevel-Muster.

Zum Schreiben von Code können Sie sie als gleich behandeln. Wann immer du doubles und floats zusammen verwendest, wenn du nicht explizit etwas anderes sagst, wird der float automatisch in ein double umgewandelt und der Ausdruck ergibt ein double, so dass eine Float Unendlichkeit für die meisten praktischen Zwecke wie eine doppelte Unendlichkeit wirkt.

    
Adam Mihalcin 10.04.2012, 05:13
quelle
1

Es kommt darauf an, was du mit "gleich" meinst. Die Bitmuster sind unterschiedlich, weil das Zeichen anders ist, aber sie sind immer beide unendlich.

Darüber hinaus erhalten die Regeln für das Hochladen von Floats die unendliche Natur bei der Konvertierung in ein Double.

    
paxdiablo 10.04.2012 05:13
quelle
1

In Java können Sie einen double nicht direkt mit einem float vergleichen. Wenn Sie dies versuchen, wird die float automatisch zuerst in eine double konvertiert. Das gleiche Problem tritt auf, wenn Sie float an eine Methode übergeben, die ein double Argument verwendet. Und wenn Sie Float.POSITIVE_INFINITY (zum Beispiel) in ein double konvertieren, erhalten Sie Double.POSITIVE_INFINITY .

Die Antwort auf Ihre Frage lautet also, dass Double.POSITIVE_INFINITY und Float.POSITIVE_INFINITY nicht ganz dasselbe sind, aber beide bezeichnen "eine Zahl, die zu groß ist, um sie darzustellen" und daher die Antwort, die == Ihnen gibt logisch konsistent.

    
Stephen C 10.04.2012 06:35
quelle
1

Es gibt keine Möglichkeit, ein float mit double in Java als solches zu vergleichen. Alle Operationen, die Sie wahrscheinlich verwenden werden, vergleichen double mit double , nachdem Sie die float auf eine double

implicitly erhöht haben %Vor%     
Peter Lawrey 10.04.2012 08:19
quelle

Tags und Links