Was ist der inklusiven Bereich von float und double in Java?
-
22-07-2019 - |
Frage
Was ist der inklusiven Bereich von float und double in Java?
Warum sind Sie nicht zu empfehlen Schwimmer zu verwenden oder für irgendetwas zu verdoppeln, die Genauigkeit erfordern?
Lösung
Java Double
Klasse Mitglieder der Min- und Max-Wert für den Typ enthält.
2^-1074 <= x <= (2-2^-52)·2^1023 // where x is the double.
Überprüfen Sie die Min_VALUE
und MAX_VALUE
static final Mitglieder Double
.
(einige) Menschen werden vorschlagen, gegen die Verwendung von Gleitkomma-Typ für Dinge, bei denen Genauigkeit und Präzision entscheidend sind, da Rundungsfehler Berechnungen durch messbare (small) Beträge abwerfen können.
Andere Tipps
Java Primitive Datentypen
boolean: 1 Bit. nehmen können auf die Werte wahr und falsch nur.
Byte: 1 Byte mit Vorzeichen (Zweier-Komplement). Deckt Werte von -128 bis 127.
Kurz gesagt: 2 Bytes, unterzeichnet (Zweierkomplement), -32.768 bis 32.767
int: 4 Bytes, AK (Zweierkomplement). -2147483648 bis 2.147.483.647.
long: 8 Bytes AK (Zweier-Komplement). Im Bereich von -9.223.372.036.854.775.808 bis +9.223.372.036.854.775.807.
float: 4 Bytes, IEEE 754. deckt einen Bereich von 45 bis 1.40129846432481707e-3.40282346638528860e + 38 (positiv oder negativ).
double: 8 Bytes IEEE 754. deckt einen Bereich von 4.94065645841246544e-324d 308d + (positiv oder negativ) 1.79769313486231570e.
char: 2 Byte, ohne Vorzeichen, Unicode, 0 bis 65.535
Binary Gleitkommazahlen hat interessante Präzision Eigenschaften, da der Wert als binäre ganze Zahl in einem binären potenzierte gespeichert wird. Wenn mit Unter ganzzahligen Werten handeln (dh, Werte zwischen 0 und 1), negativen Potenzen von zwei „abrunden“ ganz anders als negativ Zehnerpotenzen.
Zum Beispiel kann die Zahl 0,1 von 1 x 10 dargestellt werden -1 , aber es gibt keine Kombination aus Basis-2-Exponent und Mantisse, die genau 0,1 darstellen kann - in der Nähe bekommen Sie ist 0,10000000000000001.
Also, wenn Sie eine Anwendung, bei der Sie mit Werten wie 0,1 oder 0,01 sehr viel arbeiten, aber wo klein (weniger als ,000000000000001%) Fehler nicht toleriert werden können, dann binäre Gleitkommazahlen sind nicht für Sie.
Wenn umgekehrt Zehnerpotenzen sind keine „speziellen“ auf Ihre Bewerbung (Zehnerpotenzen sind in Währungsumrechnungen wichtig, aber nicht in, sagen wir, die meisten Anwendungen der Physik), dann sind Sie tatsächlich besser mit binären Gleitkommazahlen da es in der Regel mindestens eine Größenordnung schneller, und es ist viel mehr Speicher effizienter zu gestalten.
Der Artikel aus der Python-Dokumentation auf eine ausgezeichnete Arbeit leistet zu erklären, dieses Problem in einer einfachen Form zu verstehen. Wikipedia hat auch einen guten Artikel über rel="noreferrer"> schwimmend, die die Mathematik hinter der Darstellung erklärt.
float:
Diefloat
Datentyp eine einfachgenaue 32-Bit-IEEE 754 Gleitkomma-. Sein Wertebereich sprengt den Rahmen dieser Diskussion aber ist im Abschnitt angegeben 4.2.3 der Java Language Specification. Wie mit den Empfehlungen fürbyte
undshort
, verwenden Sie einenfloat
(stattdouble
), wenn Sie Speicher speichern müssen in großen Arrays von Gleitkomma- Zahlen. Dieser Datentyp sollte nie wird für die präzisen Werte verwendet werden, wie Währung. Dafür müssen Sie Verwenden Sie die java.math.BigDecimal Klasse statt. Zahlen und StreicherBigDecimal
abdeckt und andere nützliche Klassen durch die bereitgestellten Java-Plattform.
double
: Derdouble
Datentyp ist ein doppelte Genauigkeit 64-Bit-IEEE 754 Gleitkomma-. Sein Wertebereich sprengt den Rahmen dieser Diskussion aber ist im Abschnitt angegeben 4.2.3 der Java Language Specification. Für Dezimalwerte dieser Datentyp im Allgemeinen die Standardauswahl. Wie oben erwähnt, sollte dieser Datentyp nie für präzise Werte verwendet werden, wie als Währung.
Für den Bereich der Werte finden Sie im Abschnitt 4.2.3 Gleitkommatypen, Formate und Werte des JLS.
Natürlich kann man schwimmt oder Doppel für „kritische“ Dinge verwenden kann ... Viele Anwendungen tun nichts anderes als Knirschen Zahlen dieser Datentypen verwendet werden.
Sie haben vielleicht einige der verschiedenen Einschränkungen in Bezug auf Fließkommazahlen, wie die Empfehlung nie vergleichen für exakte Gleichheit , und so weiter.