Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
float soll durch schleife die größte mögliche Zahl herausfinden, Ausgabe ist aber "Infinity"
Hallo,
meine aufgabe ist durch eine schleife die größt mögliche int, float, und double zahl herauszufinden bei int ist das kein großes problem gewesen.
Java:
int g = 2;
while(g>0)
{
g=g+1;
}
if(g<0)
{
g=g-1;
}
System.out.println(g);
Durch diesen code wird eben die Zahl so lange hochgerechnet, solange sie >0 ist, bis sie irgendwann die Höchstzahl die int sein kann ist. Dann wird durch das zusätzliche +1 die Zahl zur kleinsten int Zahl und dann ist die schleife vorbei dann wird da noch eins abgezogen und schon ist sie die großt mögliche int ZAhl.
Bei float habe ich es so ähnlich versucht. Da float aber ne sehr Lange Zahl im Gegensatz zu int ist habe ist den anfangswert auf 2 gesetzt, dann soll sich die Zahl so oft verdoppeln solange sie großer als 0 ist irgendwann ist sie ja dann die kleinste mögliche float Zahl davon soll dann auch 1 abgezogen werden was diese zur größten float zahl macht. Code:
die Zahlen werden mir bis 1.7E37 angezeigt danach kommt nur Infinity und das ohne ende.
Normalerweise sollte das verdoppeln von 1.7e37 ca, 3.4Ê38 sein was das maximum von float ist d.h sollte es die negativste float zahl werden und dann durch das -1 dan zur positivsten float werden.
Weiß wer woran es hagt?
und ob das auch bei double so wäre?
Das funktioniert nur bei den Ganzzahlen, denn diese werden entsprechend dargestellt so dass beim Handling ein Überlauf stattfinden kann. Binär dargestellt hast bei der größten Zahl halt eine 0 gefolgt von nur 1en. Bei einem überlauf durch +1 hast Du dann eine 1 nur mit 0en und das ist halt das Sign Bit gefolgt von den 0en (Darstellung im 2er Komplement) https://de.wikipedia.org/wiki/Zweierkomplement
Bei float und double hast Du aber eine andere Darstellung. Da hast Du ein Sign bit, eine Mantisse und einen Exponent. Da hast Du also eine Darstellung, die beim SIgnbit das optionale -1 hat. Dann kommt ein 1,<mantisse> *2 ^ (<exponent> - bias)
Siehe dazu z.B. https://de.wikipedia.org/wiki/IEEE_754
Bei den Berechnungen kann es nicht zu diesen Überläufen kommen bzw. diese machen keinen Sinn mehr. Denn der Überlauf würde dann ja in dem expoent Wert kommen und aus einem sehr großen Wert würde dann ein sehr kleiner Wert werden. Daher gibt es spezielle Werte wie Infinite, - Infinite und NaN.
Und in dem Artikel wird auch das hidden bit (die 1, vor der Mantisse) erklärt.