Echo Mike Allen Antwort, aber in der Hoffnung, einige zusätzliche Kontext (hätte dies als Kommentar, anstatt eine separate Antwort, aber SO Reputation Feature ließ mich nicht).
Integer haben einen maximalen Wertebereich von 0 bis 2^n (wenn es sich um eine Ganzzahl ohne Vorzeichen handelt) oder -2^(n-1) bis 2^(n-1) (für Ganzzahlen mit Vorzeichen) n ist die Anzahl der Bits in der zugrunde liegenden Implementierung (n = 32 in diesem Fall). Wenn Sie eine Zahl größer als 2^31 mit einem vorzeichenbehafteten Wert darstellen möchten, können Sie keinen int verwenden. Ein signiertes Long wird bis zu 2^63 funktionieren. Für etwas Größeres kann ein signierter Float bis zu 2^127 gehen.
Eine andere Sache zu beachten ist, dass diese Auflösungsprobleme nur in Kraft sind, wenn der Wert, der in der Fließkommazahl gespeichert wird, sich dem Maximum nähert. In diesem Fall verursacht die Subtraktionsoperation eine Änderung des wahren Werts, der viele Größenordnungen kleiner als der erste Wert ist. Ein Float würde den Unterschied zwischen 100 und 101 nicht abrunden, aber es könnte die Differenz zwischen 100000000000000000000000000000000 und 1000000000000000000000000000001 abrunden.
Das gleiche gilt für kleine Werte. Wenn Sie 0,1 in eine Ganzzahl umwandeln, erhalten Sie genau 0. Dies wird im Allgemeinen nicht als Fehler des Ganzzahl-Datentyps betrachtet.
Wenn Sie mit Zahlen arbeiten, die um viele Größenordnungen unterschiedlich sind und Rundungsfehler nicht tolerieren können, benötigen Sie Datenstrukturen und Algorithmen, die die inhärenten Einschränkungen der binären Datendarstellung berücksichtigen. Eine mögliche Lösung wäre, eine Gleitkomma-Codierung mit weniger exponentiellen Bits zu verwenden, wodurch der Maximalwert begrenzt wird, wobei jedoch für eine größere Auflösung weniger signifikante Bits bereitgestellt werden.Für weitere Einzelheiten finden Sie unter:
kompilieren lässt, dass (die die Floating-Point-Codierung definiert)? Brauchen Sie keinen Gleichen nach 'x2'? – Carcigenicate
Ich kann das nicht reproduzieren. Ich bekomme stattdessen einen Syntaxfehler. –
Ich habe die Folie gefunden, die du erwähnt hast. Der Code, den Sie gepostet haben, unterscheidet sich von dem Code auf der Folie. Der Code auf der Folie weist den Syntaxfehler nicht auf. –