Ich habe es versucht
%Vor%und die Ausgabe war
%Vor%Das heißt also, "Infinity" ist für beide Datentypen gleich?
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.
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.
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.
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
Tags und Links java floating-point