Negatives Quadrat bei hohen Basen

Java-Freak

Bekanntes Mitglied
Hallo,

ich habe ein kleines Problemchen mit dem Quadrieren von hohen Zahlen in Java. Es ist wohl kaum nötig den Programmcode zu posten, er besteht einfach nur aus einer Schleife bis 100000, die jeweils das Quadrat der Zahl ausgibt. Ab ~47000 zum Quadrat gibt Java mir allerdings negative Zahlen aus - da stimmt irgendwas nicht. Ein Beispiel:
Java:
System.out.println(47327*47327); // liefert -2055122367, richtig wäre 2239844929
Woran liegt das ?
Danke schonmal ! 🙂
 
WERTEBEREICHE !

INT : -2^31 (-2147483648) bis 2^31-1 (2147483647)
LONG : -2^63 (-9223372036854775808) bis 2^63-1 (9223372036854775807)

für NOCH größere zahlen BigInteger und BigDecimal nutzen
 
Das ist ein sog. Overflow. D.h. die Zahlen verlassen den Bereich, der durch den Datentyp noch darstellbar ist. Dass da was Negatives rauskommt, liegt an der Zweierkomplement-Repräsentation von negativen Zahlen (grob gesagt: Wenn das erste Bit 1 ist, ist die Zahl negativ). Probiers mal so:
Java:
System.out.println((long)47327*47327);
// oder
System.out.println(47327*47327L);
 
naja ... nur sind die WERTEBEREICHE der PRIMITIVES absolutes grundlagen-basis-wissen ... das man drauf haben sollte ... von daher verstehe ich alleine die frage nicht
 
[OT]Na trööt, hast heute mal wieder einen Nervtag, an dem du Antworten umgeschrieben nochmal postest und Leute belehrst?[/OT]
 
nö ... und ich hab auch nichts umgeschrieben ... zumindest nicht meinen eigenen post ... sondern von mir aus nur noch mal drauf hingewiesen das die wertebereiche nunmal basiswissen der informatik sind ... wenn 4 leute gleichzeitig auf "antworten" klicken und der server so schnell nicht mehr hinterher kommt um jedem den text : "anderer user war schneller" anzuzeigen ... und sich somit sinnmäßig duplikate ergeben kann ich das ja wohl SEHR schelcht beeinflussen ...
 
[OT]Das war ja heute nicht Deine einzige Antwort. Oder benutzen diverse Leute das Pseudonym? Hier war es "nur" die Belehrung.[/OT]
 
[spiler="OT"]wenn wir uns schon so offtop unterhalten würde ich dich ebenfalls bitten spoiler-tags zu nutzen ... und wenn du schon auf etwas abzielst was nicht mit diesem thread hier zu tun hat ... dann poste es wenigstens im betreffenden thread ... oder weis drauf hin welchen du meinst ...[/spoiler]
 

Zurück
Oben