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?

War es hilfreich?

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.

Primitiven Datentypen :

  
      
  • float: Die float 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ür byte   und short, verwenden Sie einen float (statt   double), 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   Streicher BigDecimal abdeckt und   andere nützliche Klassen durch die bereitgestellten   Java-Plattform.

  •   
  • double : Der double 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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top