Warum ist Double.MIN_VALUE in nicht negativen
Kann jemand etwas Licht auf, warum Double.MIN_VALUE
ist nicht wirklich der minimale Wert, Verdoppelt sich nehmen kann? Es ist ein positiver Wert ist, und ein Doppel kann natürlich negativ sein.
Verstehe ich, warum es eine nützliche Zahl, aber es scheint ein sehr unintuitiv Namen, vor allem, wenn im Vergleich zu Integer.MIN_VALUE
. Aufruf Double.SMALLEST_POSITIVE
oder MIN_INCREMENT
oder ähnlich hätte eine klarere Semantik.
Auch, was ist der minimale Wert, Verdoppelt sich nehmen kann? Ist es -Double.MAX_VALUE
? Die docs nicht scheinen zu sagen.
Vielen Dank für die Antworten! Der Unterschied zwischen Reichweite und Präzision macht Sinn. Ich finde immer noch die Namensgebung ziemlich seltsam und widersprüchlich, aber es ist praktikabel.
Ich vermute, weil es geschrieben ist, die von den gleichen Genies, die als eine Methode bezeichnet
Im Grunde hast du Recht, es ist schlimm, Semantik
Ich vermute, weil es geschrieben ist, die von den gleichen Genies, die als eine Methode bezeichnet
writeBytes
die eine String
.Im Grunde hast du Recht, es ist schlimm, Semantik
InformationsquelleAutor mo-seph | 2010-10-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dem IEEE-754-format verfügt über ein bit für das Vorzeichen reserviert und die restlichen bits repräsentieren die Größenordnung. Dies bedeutet, dass es ist "symmetrisch" um die origo (im Gegensatz zu den Integer-Werte, die ein mehr negativer Wert). So ist der minimale Wert, ist einfach das gleiche wie der maximale Wert, mit dem Zeichen-bit geändert, so ja,
-Double.MAX_VALUE
ist die kleinste mögliche tatsächliche Zahl kann man darstellen mit einerdouble
.Ich nehme an, die
Double.MAX_VALUE
gesehen werden sollte, als maximale Stärke, in dem Fall macht es wirklich Sinn, einfach schreiben-Double.MAX_VALUE
. Es erklärt auch, warumDouble.MIN_VALUE
ist die am wenigsten positiven Wert (denn das stellt die geringste mögliche Größe).Aber sicher, ich bin damit einverstanden, dass die Namensgebung ist ein wenig irreführend. Wird verwendet, um die Bedeutung
Integer.MIN_VALUE
auch ich war ein bisschen überrascht, wenn ich lese, dassDouble.MIN_VALUE
war die kleinste absolute Wert, der dargestellt werden können. Vielleicht dachten Sie, es war überflüssig, um eine Konstante darstellt, die geringste mögliche Wert, denn Sie ist einfach eine-
Weg vonMAX_VALUE
🙂(Beachten Sie, dass es auch
Double.NEGATIVE_INFINITY
aber ich bin Missachtung aus, als es ist gesehen als "besonderer Fall" und nicht in der Tat stellen, die tatsächliche Zahl).Hier ist ein guter text zum Thema.
Ist das nicht der "kleinsten absoluten Wert, der dargestellt werden kann", soll den Namen 'epsilon'?
es ist nicht wirklich "soll" genannt werden, etwas besonderes. Epsilon ist nur ein griechischer Buchstabe, der Häufig repräsentiert eine beliebig kleine positive Menge in der Mathematik / Physik. Gehen Sie wählte
SmallestNonzeroFloat64
zum Beispiel.InformationsquelleAutor aioobe
Diese Konstanten haben nichts zu tun mit Zeichen. Das macht mehr Sinn, wenn man bedenkt, Doppel als eine Komposition aus drei teilen: Vorzeichen, Exponent und Mantisse.
Doppel.MIN_VALUE ist eigentlich der kleinste Wert der Mantisse kann davon ausgehen, wenn der Exponent wird auf minimun Wert, bevor ein flush auf null Auftritt. Ebenfalls MAX_VALUE kann verstanden werden als der größte Wert der Mantisse kann davon ausgehen, wenn der Exponent wird auf maximalen Wert, bevor ein flush bis zur Unendlichkeit Auftritt.
Einen aussagekräftigeren Namen für diese beiden könnte Größte Absolute (hinzufügen von nicht-null für verbositiy) und Kleinste Absolute - Wert (non-infinity-für verbositiy).
Check-out die IEEE 754 (1985) standard für details. Es gibt eine überarbeitete (2008) version, aber das stellt nur weitere Formate, die nicht einmal unterstützt durch java (genaugenommen java auch fehlt die Unterstützung für einige verbindliche Merkmale von IEEE 754 1985, wie viele andere high-level-Sprachen).
InformationsquelleAutor Durandal
Ich nehme an, die verwirrende Namen zurück auf C, die definiert
FLT_MIN
als die kleinste positive Zahl ist.Wie in Java, wo Sie haben zu verwenden
-Double.MAX_VALUE
haben, müssen Sie auf-FLT_MAX
in die kleinsten Schwimmer in C.InformationsquelleAutor Philipp Claßen
Weil mit floating-point-zahlen, die Präzision ist, was wichtig ist, da es keine genaue Reichweite.
Aber ich Stimme zu, das sollte es wohl gewesen, mit dem Namen etwas besser 🙂
weil Ihr die maximale genauen Wert (nicht unendlich), nicht die Buchhaltung für seine Zeichen.
InformationsquelleAutor John Gardner
Den minimalen Wert für ein Doppelzimmer ist
Double.NEGATIVE_INFINITY
deshalbDouble.MIN_VALUE
ist nicht wirklich das minimum für eineDouble
.Als double sind Gleitkommazahlen, können Sie nur die größte Zahl (mit geringerer Genauigkeit) oder die nächstgelegene Zahl zu 0 (mit einer großen Präzision).
Wenn Sie wirklich wollen, einen minimalen Wert für ein double, dass ist nicht unendlich, dann können Sie
-Double.MAX_VALUE
.Double.MIN_VALUE
könnte gleichDouble.NEGATIVE_INFINITY
.Nein. @mo-seph,
Double.POSITIVE_INFINITY
, +∞ > alles und —∞ < allesHebert, >= und <= um genau zu sein 😉
Du wohl mich falsch verstanden. In einer besseren Welt
Double.MIN_VALUE
wäre gleichDouble.NEGATIVE_INFINITY
, denn dann wäre es konsistent mitMIN_VALUE
in der integer-Typen. Ich konnte Sie initialisieren eine variable für die Berechnung eines maximum mitMIN_VALUE
und es wäre richtig. DieDouble.MIN_VALUE
wir jetzt haben, hätte einen besseren Namen. (Und Analog fürMAX_VALUE
.)InformationsquelleAutor Colin Hebert
So wie es in der Dokumente,
Der trick hier ist, wir reden hier über eine floating-point-Zahl Darstellung. Der Datentyp double ist ein double-precision 64-bit IEEE 754-floating-point. Schwimmende Punkte repräsentieren die zahlen von 1,000,000,000,000 zu 0.0000000000000001 mit Leichtigkeit, und bei gleichzeitiger Maximierung der Genauigkeit (Zahl von Ziffern) an beiden enden der Skala. (Für mehr siehe diese)
Den Mantisse immer eine positive Zahl, hält die signifikanten Ziffern der Gleitkommazahl. Der exponent gibt die positive oder negative Kraft des radix, dass die Mantisse und Vorzeichen sollten multipliziert werden. Die vier Komponenten werden kombiniert als folgt, um die floating-point-Wert.
Denke, dass die MIN_VALUE ist der minimale Wert, den die Mantisse darstellen kann. Wie die minimum-Werte einer floating-point-Darstellung ist die minimale Größe, kann dargestellt werden. (Hätte einen besseren Namen zu dieser Verwirrung zu vermeiden, wenn)
Unten ist nur zur info.
Double-precision floating-point darstellen kann 2,098 Zweierpotenzen von 2^-1074 bis 2^1023. Denormalisierte Zweierpotenzen von 2^-1074 bis 2^-1023; normalisiert Zweierpotenzen von 2^-1022 bis 2^1023. Finden Sie diese und diese.
InformationsquelleAutor prime