/kill Schaden in Minecraft?
Früher hat der /kill Befehl 2^128 Schaden gemacht. Wie wird so etwas programmiert?
Bei 64bit ist der integer doch max 2^64...
3 Antworten
Auf GitHub hat jemand einen Teil des dekompilierten Quellcodes (was z. B. auch zur Mod-Entwicklung gemacht wird) hochgeladen. Hier in der Basisklasse für lebende Wesen ist die Funktion des /kill Kommando implementiert: https://github.com/WangTingZheng/mcp940/blob/d0c030a4139ce7cf3f284b180f0d9ea87bdf8141/src/minecraft/net/minecraft/entity/EntityLivingBase.java#L258
Das Wesen bekommt durch /kill anscheinend Float.MAX_VALUE Schaden. Es werden für die Leben also Gleitkommazahlen verwendet, nicht Ganzzahlen (welche, wie du korrekt beschrieben hast, im Englischen "integer" heißen und in den meisten PCs nativ bis 2^64 gehen; darüber hinaus muss jede Berechnung aus mehrere Operationen gebaut werden, siehe: https://de.wikipedia.org/wiki/Langzahlarithmetik).
Zurück zu Floats: Im Computer werden diese üblicherweise als IEEE-754 (hier binary32) gespeichert und können nicht jeden Wert annehmen, sondern springen manchmal, um eine größere Gesamtreichweite darstellen zu können. Das entspricht in der 10 Basis maximal etwa 3.4*10³⁸, in der zweier Basis genau (2−2−23) · 2127. Wahrscheinlich hat das jemand auf 2¹²⁸ gerundet.
Leben und Schaden sind Floating-Point, nicht Integer.
Man könnte biginteger nutzen oder float/double.
Floating points können massiv hohe Werte erreichen.
Laut o3mini
Minecraft's /kill command inflicts approximately 3.4×10^38 damage, a number that appears to be 2^128. This enormous value is not a result of 64‑bit integer arithmetic but rather how Minecraft represents damage values internally.