Wertebereich/Datentyp

fenstergummi

Mitglied
Hallo zusammen,

ich bin neu hier und versuche Java-Programmieren zu erlenern.

Kann mir jemand sagen, welcher Datentyp zu welchen Wertebereich passt? (kleinsmöglicher Datentyp) und wie ich sowas errechnen kann?

Vielen Dank schonmal.

510.33 bis 10012.61
0.987543219 bis 1
1 bis 100
-10 bis 3243231231
k bis z
 

fenstergummi

Mitglied
Hey, erstmal danke für die schnellen Antworten und den Link.
ist für mich alles noch etwas unübersichtlich das ganze. Bin noch ganz am Anfang...

Sehe ich das also richtig...

510.33 bis 10012.61 = short
0.987543219 bis 1 = long
1 bis 100 = byte
-10 bis 3243231231 = float
k bis z = char

Sorry fürs bloede fragen :)
 

InfectedBytes

Top Contributor
Kommazahlen:
float oder double
Floats haben eine Genauigkeit von etwa 7 Dezimalstellen, Doubles eine von 14 Stellen.

Ganzzahlen:
byte (8Bit) => 2^8=256 verschiedene Zahlen darstellbar, da das Byte in Java vorzeichenbehaftet ist kannst du also Zahlen von -128 bis +127 darstellen
short (16Bit) => 2^16=65536 verschiedene Zahlen => -32768 bis +32767
int (32Bit) => 2^32 = ~4mrd => +-2 mrd
long (64Bit) => 2^64 = ~18 trillionen => +-9 trillionen

char ist wie short, allerdings ohne Vorzeichen => 0 bis 65536
 

BuckRogers

Bekanntes Mitglied
Fällt alles unter die Kategorie nice-to-know. Was man meistens braucht und was ausreicht ist long, int und String. Boolean nicht zu vergessen, haha!
Wenn es mal kniffelig wird brauchst du die anderen primitiven Datentypen. Versuche dich mal mit der simplen Standartausgabe in Java und spiel mit den Werten der Datentypen rum.
 

InfectedBytes

Top Contributor
510.33 bis 10012.61 = double
0.987543219 bis 1 = float
-10 bis 3243231231 = int
passt leider nicht

510.33 bis 10012.61: double passt auf jeden Fall, aber im Grunde könnte man auch Argumentieren, dass hier float reicht, da zumindest die Grenzen bereits mit einem float dargestellt werden können.

0.987543219: sind zu viele stellen für float, muss also auch double sein

Ein int geht nur bis etwa +2mrd, daher braucht man für 3243231231 bereits long
 
X

Xyz1

Gast
Du bist zwar Anfänger, aber es ist immer gut zu wissen, wenn man den Standard kennt: https://de.wikipedia.org/wiki/IEEE_754 und https://de.wikipedia.org/wiki/Gleitkommazahl - es ist ja nicht so, als wenn Datentypen in Java nicht standardisiert wären.

Demzufolge:
510.33 bis 10012.61 float
0.987543219 bis 1 double
1 bis 100 byte/char/short
-10 bis 3243231231 long
k bis z char/String

Wie ich eingangs schon schrieb, kommt es aber weiter auf den Anwendungsfall an. Soll das Rechnersystem später um Randwerte erweitert werden, zum Bleistift -1 bei 1 bis 100, oder nicht??? Raketenabstürze gab es in der Vergangenheit!!! Dabei geht dann viel Image, Material und Menschen verloren (nach Wichtigkeit nicht unbedingt in dieser Reihenfolge). Auch wäre es schlecht, wenn dein Prozessor in der CPU falsch rechnen würde...

Wie es auch sei, du kommst nicht drum rum, DICH intensiv mit der Anwendung auseinanderzusetzen.
 

fenstergummi

Mitglied
Alles klar, ich danke Euch vielmals! Ich werde mich auf jeden Fall weiter in diese Thematik stuerzen! Hoert sich wahrscheinlich alles erstmal sehr kompliziert an... ;-)
 
X

Xyz1

Gast
Ist das Thema denn gelöst? Die korrekte Berechnung zu zeigen - ohne bloßes Draufschauen - ist gar nicht so leicht. Möchte diese jemand hier machen? Es müsste ja gezeigt werden: float < 0.987543219 bis 1 < double. Wer möchte das tun?
 

JStein52

Top Contributor
X

Xyz1

Gast
Wo siehst du das Problem ? @InfectedBytes hat es oben ja schon getan:

Damit ist nicht gezeigt, dass 0.987543219 mathematisch gesehen nicht in den Wertebereich passt.

Dass das als Literal nicht vom Compiler akzeptiert wird, ist noch kein math. Beweis.

Ohne Mathematischen Beweis sind schon Raketen abgestürzt.

Ich würde tendieren, mal eine Induktion von 0.987543219 bis .. zu machen.
 

JStein52

Top Contributor
Es geht hier aber nicht um den Wertebereich ! Du hast doch oben selber den Link zur IEEE 754 gepostet. Demnach kannst du bei float nur 7-8 Dezimalstellen darstellen, also nicht den Wert 0.987543219 ! Und das hat nichts damit zu tun ob der Compiler das Literal akzeptiert. Das tut er ja. Aber es kann in float nicht dargestellt werden ! Wenn du hier float verwendest würde die Rakete auf jeden Fall abstürzen.
 

InfectedBytes

Top Contributor
Hierfür brauchst du keine Induktion.
float hat nach IEEE 754 einen 8 Bit Exponenten und eine 23 Bit Mantisse.
Wenn man nun also per Hand 0.987543219 in eine Gleitkommazahl umwandelt, stellt man fest, dass die Mantisse mehr als 23 Bit haben wird => float reicht nicht
 
X

Xyz1

Gast
Oder man schreibt sich diese kleine Hilfsmethode:
Java:
    private static boolean equal(double d1, float f1) {
        // System.out.println(Long.toBinaryString(Double.doubleToLongBits(d1)));
        // System.out.println(Integer.toBinaryString(Float.floatToIntBits(f1)));
        System.out.println(Long.toBinaryString(Double.doubleToLongBits(d1) << 11));
        System.out.println(Long.toBinaryString((long) (Float.floatToIntBits(f1) << 8) << 32));
        return Double.doubleToLongBits(d1) << 11 == (long) (Float.floatToIntBits(f1) << 8) << 32;
    }

        System.out.println(equal(123, 123));
        System.out.println(equal(123.25, 123.25f));
        System.out.println(equal(0.9, 0.9f));
        System.out.println(equal(0.987543219, 0.987543219f));

Welche dann diese wunderschöne Ausgabe erstellt:
Code:
1111011000000000000000000000000000000000000000000000000000000000
1111011000000000000000000000000000000000000000000000000000000000
true
1111011010000000000000000000000000000000000000000000000000000000
1111011010000000000000000000000000000000000000000000000000000000
true
110011001100110011001100110011001100110011001100110100000000000
110011001100110011001100000000000000000000000000000000000000000
false
111110011001111101000011110010011111101110101110100000000000000
111110011001111101000100000000000000000000000000000000000000000
false

Woran dann erkennt, selbst 0.9(f) wäre für float nicht geeignet...

Edit: Vorzeichenbit ist (immer) 0, fällt deshalb out...

Exponent: immer 8 und 11 Bits...
 

Meniskusschaden

Top Contributor
Wieso das denn ??
Wenn sich der Nachkommateil bei n verfügbaren Stellen nicht als eine Summe der Kehrwerte der ersten n Zweierpotenzen darstellen lässt, wird es eben ungenau. Bei float natürlich ungenauer als bei double.
Java:
System.out.println(0.9f - 0.5);
System.out.println(0.9  - 0.5);
führt zu folgender Ausgabe:
Code:
0.3999999761581421
0.4

Edit: Was ich damit eigentlich sagen wollte: ob ein Wert als float oder double absolut präzise darstellbar ist, hängt nicht von der Anzahl der dezimalen Nachkommastellen ab, sondern davon, ob er binär "gut passt".
 
X

Xyz1

Gast
Die Rakete stürzte wegen eines Integer Over- oder Underflows ab, weil der Wertebereich, wahrscheinlich 16 Bit war. Das lässt sich nicht ganz übertragen - außer, ein Wertebereich ist zu klein oder zu groß. Vorzeichenwechsel auch noch mal ein Thema. Jetzt mal ungeachtet dessen ist Gleitkommazahlenarithmetik "ungenau". "Ungenau" ist auch nicht richtig gewählt. Was ich sagen wollte, nur selten ist Rechnen mit rationalen/irrationalen Dezimalzahlen "genau das Richtige"... :(
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Datentypen Tipps, Ratschläge erwünscht bzgl. Datentyp bestimmen über Wertebereich Java Basics - Anfänger-Themen 5
J Einige Anfängerfragen (Datentypen, Wertebereich) Java Basics - Anfänger-Themen 11
H Datentypen Wertebereich von <Klassenname> <Variable> Java Basics - Anfänger-Themen 12
L Wertebereich von boolean Java Basics - Anfänger-Themen 4
L Wertebereich if-Satz angeben (z.B: Benzinverbrauch 51 <=75<) Java Basics - Anfänger-Themen 1
F Map, jedoch mit einem Wertebereich Java Basics - Anfänger-Themen 3
K Datentypen Wertebereich float/double - Warum nicht hoch -1 Java Basics - Anfänger-Themen 6
L Wertebereich eingrenzen Java Basics - Anfänger-Themen 11
G Wertebereich wie kodieren? Java Basics - Anfänger-Themen 5
R Float Wertebereich Java Basics - Anfänger-Themen 3
T Setter Methode Wertebereich eingrenzen Java Basics - Anfänger-Themen 5
R math.random wertebereich 16-21 Java Basics - Anfänger-Themen 3
K OOP Wertebereich Ergebnis von % Operator Java Basics - Anfänger-Themen 8
hdi Wertebereich von double, wtf? Java Basics - Anfänger-Themen 2
K Wertebereich bei Attributdeklaration Java Basics - Anfänger-Themen 2
J Random Wertebereich Java Basics - Anfänger-Themen 2
T Wertebereich auf 0 bis 1 einschränken Java Basics - Anfänger-Themen 10
F Datentypen Wertebereiche passender Datentyp Java Basics - Anfänger-Themen 5
K Warum wird mir hier nach dem ersten Durchlauf zwei mal "welchen Datentyp wollen sie übergeben?" ausgegeben ? Java Basics - Anfänger-Themen 1
MiMa Probleme mit Datentyp long ?? Java Basics - Anfänger-Themen 2
D Arraylist mit Komplexen Datentyp Java Basics - Anfänger-Themen 3
Igig1 Welche Werte sind als default Werte in einem Array, der als Datentyp eine Klasse hat? Java Basics - Anfänger-Themen 1
B Datentyp für Einzelnes Objekt oder Liste Java Basics - Anfänger-Themen 9
C initialisieren eines arrays richtiger Größe und mit geeignetem Datentyp Java Basics - Anfänger-Themen 26
H Datentyp mit 3 Zuständen Java Basics - Anfänger-Themen 42
javaluke Erste Schritte Array nach Datentyp sortieren Java Basics - Anfänger-Themen 16
Kanaska Datentyp für Zahlenbereiche Java Basics - Anfänger-Themen 7
A Datentyp char Java Basics - Anfänger-Themen 27
I Klassen als Datentyp nutzen? Java Basics - Anfänger-Themen 11
C unverständlicher Code Attribute ohne Datentyp, wie geht das? Java Basics - Anfänger-Themen 8
T Datentyp mit Anführungszeichen drinnen Java Basics - Anfänger-Themen 3
R Datentypen Datentyp String lenght & charAT Java Basics - Anfänger-Themen 4
M Array mit eigenem Datentyp probleme beim übergeben Java Basics - Anfänger-Themen 6
C Interface als Datentyp eines Attributes? Java Basics - Anfänger-Themen 6
B Datentypen Datentyp welcher den gleichen Namen wie die Klasse trägt? Java Basics - Anfänger-Themen 1
D Datentypen Welcher ist der beste Datentyp? Java Basics - Anfänger-Themen 28
F Datentypen Missverständnis Datentyp Java Basics - Anfänger-Themen 2
D Rechnen mit numerischen Datentyp Frage Java Basics - Anfänger-Themen 16
E Klassename als Datentyp??? Java Basics - Anfänger-Themen 4
M Datentypen Java Datentyp Definition Java Basics - Anfänger-Themen 6
MiMa Datentyp Short Wert zuweisen über Methode Java Basics - Anfänger-Themen 2
Z Was habe ich davon mit einem Datentyp verschiedene Instanzen zu haben? Java Basics - Anfänger-Themen 6
D Klassen Gesucht: Einfache Beispiel-Klasse für einen Datentyp Java Basics - Anfänger-Themen 7
E Datentypen Benutzerdefinierten Datentyp verwenden Java Basics - Anfänger-Themen 1
ms_cikar Java Datentyp unwandlung Java Basics - Anfänger-Themen 7
Y Warum void statt Datentyp + return Java Basics - Anfänger-Themen 4
M Interface als Datentyp Java Basics - Anfänger-Themen 12
R Variablen Datentyp erst während Laufzeit festlegen Java Basics - Anfänger-Themen 6
1 Neuen Datentyp für rationale Zahlen als Klasse entwickeln Java Basics - Anfänger-Themen 20
R Datentypen Datentyp eines Werts in einer Textdateizeile abfragen und ändern Java Basics - Anfänger-Themen 4
R Interface Datentyp bei Erzeugung eines Objekts, dessen Klasse eine Schnittstelle implementiert Java Basics - Anfänger-Themen 18
B Collections Collection soll nur einen bestimmten Datentyp aufnehmen Java Basics - Anfänger-Themen 12
V Datentypen Frage zum Datentyp Byte Java Basics - Anfänger-Themen 11
B datentyp in binär umwandeln Java Basics - Anfänger-Themen 5
S Primitiver Datentyp Short , Vorteil/Nachteil Betrachtung Java Basics - Anfänger-Themen 6
J Field auf Datentyp prüfen Java Basics - Anfänger-Themen 8
D Datentyp Object Java Basics - Anfänger-Themen 2
A Datentypen Mehrdimensionaler Datentyp gesucht Java Basics - Anfänger-Themen 4
D Datentypen Abstrakter Datentyp lässt sich nicht casten Java Basics - Anfänger-Themen 7
F Klassenorganisation: Datentyp in Datentyp anlegen Java Basics - Anfänger-Themen 3
N Unerklärlich: Rekursiver Algorithmus gibt falschen Datentyp zurück... Java Basics - Anfänger-Themen 4
J Datentypen Was ist der Sinn vom Datentyp "char" ? Java Basics - Anfänger-Themen 11
G Eigener Autoboxing Datentyp Java Basics - Anfänger-Themen 3
Binary.Coder Welcher Datentyp für den Simplex Algorithmus Java Basics - Anfänger-Themen 3
Guybrush Threepwood Effizientester Datentyp zur Speicherung einer ungeordneten Menge von ints Java Basics - Anfänger-Themen 8
B Datentyp für +,-,*,/ Java Basics - Anfänger-Themen 5
D Datentypen Rekursiver Datentyp Java Basics - Anfänger-Themen 8
GianaSisters Auf Datentyp überprüfen Java Basics - Anfänger-Themen 13
W Datentypen Operatoren für eigenen Datentyp nutzen Java Basics - Anfänger-Themen 2
M Array mit komplexem Datentyp Java Basics - Anfänger-Themen 9
M 2 Arrays mit komplexen Datentyp vergleichen Java Basics - Anfänger-Themen 8
G Datentypen Welcher Datentyp Java Basics - Anfänger-Themen 2
F Datentypen Welchen Wert hat ein einfacher Datentyp nach der Deklaration? Java Basics - Anfänger-Themen 6
J Datentypen Datentyp für Datum Java Basics - Anfänger-Themen 23
B Java Bean, JSP, Komplexer Datentyp Java Basics - Anfänger-Themen 3
I Datentypen Eigener DatenTyp Java Basics - Anfänger-Themen 2
E Datentyp Array Java Basics - Anfänger-Themen 10
M Datentypen Eigenen Datentyp toArray() Java Basics - Anfänger-Themen 4
A Datentyp Char wird in BlueJ nur als leerer weißer Kasten dargestellt Java Basics - Anfänger-Themen 1
N Frage zu Datentyp byte Java Basics - Anfänger-Themen 14
F Datentyp Number???? Java Basics - Anfänger-Themen 2
A einlesen, schreiben, umwandlung datentyp Java Basics - Anfänger-Themen 10
A Datentyp mit String festlegen? Java Basics - Anfänger-Themen 13
D Generischer Datentyp Java Basics - Anfänger-Themen 2
D Datentyp: Liste von String->Double dingern Java Basics - Anfänger-Themen 4
K Datentyp vs. Datenstruktur - Unterschiede Java Basics - Anfänger-Themen 13
C Datentyp von einer Variablen ermitteln. Java Basics - Anfänger-Themen 12
M Datentyp Parameter Java Basics - Anfänger-Themen 18
R Welchen Datentyp verwenden? Java Basics - Anfänger-Themen 12
B Datentyp anlegen Java Basics - Anfänger-Themen 6
M Eigene Klasse mit "Enumeration"-Datentyp verknüpfe Java Basics - Anfänger-Themen 16
K Datentyp Problem Java Basics - Anfänger-Themen 2
X Rekursion & Generischer Datentyp Java Basics - Anfänger-Themen 11
A neuen Datentyp (Digit) definieren Java Basics - Anfänger-Themen 12
A Datentyp String in char umwandeln Java Basics - Anfänger-Themen 3
J datentyp -objectTyp Rückgabe Java Basics - Anfänger-Themen 2
D Superinterface als Datentyp Java Basics - Anfänger-Themen 5
E Generischer Datentyp und Arrays Java Basics - Anfänger-Themen 3
Z ArrayList<Entry<Datentyp, Integer>> ? Java Basics - Anfänger-Themen 12
L Datentyp Problem Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben