Frage von schinkenBrot87, 69

Wieso ist der folgende Ausdruck in Java = 0?

float a = –16777217F;

float b = 16777216F;

float c = 1F;

System.out.println( a + (b + c) ); // 0.0

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von KnusperPudding, Community-Experte für Java, 49

Warum? Das ist doch Korrekt.

b + c = 16.777.216 + 1

a       =  -16.777.217


a + (b+c) =   -16.777.217 + 16.777.217 = 0


Kommentar von schinkenBrot87 ,

... Hab irgendwie da die ganze Zeit 1,6777217 bzw 1,6777216 statt 16777217 und 16777216 gelesen. Dadurch habe ich die letzte gedachte Nachkommastelle einfach nicht beachtet O_o. Somit hatte ich dann -1,677 + 1,677 +1 = 1. Stelle mich halt manchmal echt dumm an :-F.  Trotzdem Danke :-)

Kommentar von KnusperPudding ,

Alles klar, kommt mal vor

Expertenantwort
von Willibergi, Community-Experte für Mathe & Mathematik, 38

Warum sollte er das nicht? ^^

LG Willibergi

Antwort
von phigeek, 6

Die Antworten sprechen für sich.

Doch spannender ist die folgende Frage: Warum ist

a + b + c + 1

nicht gleich

a + (b + c + 1)

, wenn

a= 1e17

b= -2

c = 1-a

???

Die Antwort liegt in der Genauigkeit der Fließkommazahlen. Wenn die letzte Ziffer abgeschnitten wird, kann etwas anderes herauskommen. Je nachdem, ob man vorher, oder nachher die letzte Stelle "abschneidet", bzw. rundet.

Keine passende Antwort gefunden?

Fragen Sie die Community