Java Math-Klasse
Mathematische Operationen in Java mit Math.abs, Math.sqrt, Math.pow, Math.random und anderen statischen Methoden durchführen.
Die java.lang.Math-Klasse ist eine Sammlung statischer Methoden für mathematische Operationen, die über die grundlegenden +, -, *, /, % Operatoren hinausgehen. Absolutwerte, Potenzen, Wurzeln, Trigonometrie, Logarithmen, Runden und Zufallszahlen — all das ist hier zu finden. Da Math im Paket java.lang liegt, wird es implizit importiert — es ist keine import-Anweisung erforderlich, die Methoden werden direkt aufgerufen: Math.sqrt(2).
Diese Seite geht jede Methodengruppe durch, zeigt den genauen Rückgabewert und weist auf Fallstricke hin (welche Methoden double vs. long zurückgeben, warum Trigonometrie in Radiant arbeitet und wann Math das falsche Werkzeug ist). Jede Methode ist static, wird also auf der Klasse selbst aufgerufen, niemals auf einer Instanz.
Absolutwert, min, max
Math.abs(-7); // 7
Math.abs(-3.14); // 3.14
Math.min(3, 5); // 3
Math.max(3, 5); // 5
Math.min(1.5, 1.7); // 1.5Alle vier sind für int, long, float und double überladen.
Potenzen und Wurzeln
Math.pow(2, 10); // 1024.0 — always returns double
Math.sqrt(2); // 1.4142135623730951
Math.cbrt(27); // 3.0
Math.exp(1); // 2.718281828... — e^xFür ganzzahlige Exponenten ist Math.pow überdimensioniert — eine Schleife oder << ist schneller.
Logarithmen
Math.log(Math.E); // 1.0 — natural log (ln)
Math.log10(1000); // 3.0 — base-10 log
Math.log(8) / Math.log(2); // 3.0 — log base 2Java hat keine eingebaute „log-Basis-N"-Methode, daher berechnet man sie mit der Basiswechselformel: Math.log(x) / Math.log(base). Für höhere Präzision nahe x = 1 berechnet Math.log1p(x) den Wert ln(1 + x) und Math.expm1(x) berechnet e^x - 1, ohne signifikante Stellen zu verlieren.
Runden
| Methode | Verhalten |
|---|---|
Math.floor(x) | abrunden (in Richtung -∞), gibt double zurück |
Math.ceil(x) | aufrunden (in Richtung +∞), gibt double zurück |
Math.round(x) | auf den nächsten Wert runden, Hälften werden aufgerundet; gibt long für double, int für float zurück |
Math.rint(x) | auf den nächsten Wert runden, Hälften werden auf gerade gerundet; gibt double zurück |
Math.floor(2.7); // 2.0
Math.ceil(2.1); // 3.0
Math.round(2.5); // 3 — ties round up
Math.round(-2.5); // -2 — toward positive infinity
Math.rint(0.5); // 0.0 — banker's rounding
Math.rint(1.5); // 2.0Für dezimalbewusstes Runden (z. B. auf zwei Dezimalstellen für Geldbeträge) verwendet man BigDecimal mit einem RoundingMode.
Trigonometrie
Alle trigonometrischen Funktionen arbeiten in Radiant. Umrechnen mit Math.toRadians / Math.toDegrees:
Math.sin(Math.PI / 2); // 1.0
Math.cos(0); // 1.0
Math.tan(Math.PI / 4); // 0.999999... (≈ 1)
Math.toRadians(180); // Math.PI
Math.toDegrees(Math.PI); // 180.0
Math.atan2(1, 1); // π/4 — handles quadrant correctlyMath.atan2(y, x) ist das richtige Werkzeug, um „den Winkel dieses Vektors" zu berechnen, nicht Math.atan(y/x).
Konstanten
Math.PI; // 3.141592653589793
Math.E; // 2.718281828459045Zufallszahlen
Math.random() gibt einen double-Wert gleichmäßig verteilt in [0.0, 1.0) zurück:
double r = Math.random(); // 0.0 ≤ r < 1.0
int dieRoll = 1 + (int)(Math.random() * 6); // 1..6Für alles Weitere (mit Seed, reproduzierbar, Bereiche, Gaußverteilung) verwendet man java.util.Random oder java.util.concurrent.ThreadLocalRandom:
import java.util.Random;
Random rng = new Random(42); // seeded, reproducible
int n = rng.nextInt(100); // 0..99
double g = rng.nextGaussian(); // normal distributionFür Sicherheits-Tokens sollte man nicht Math.random oder Random verwenden — stattdessen java.security.SecureRandom nutzen.
Überlaufgeprüfte Arithmetik
Math.addExact, subtractExact, multiplyExact, negateExact, incrementExact, decrementExact werfen eine ArithmeticException bei ganzzahligem Überlauf:
Math.addExact(Integer.MAX_VALUE, 1); // throws ArithmeticExceptionNützlich, wenn Korrektheit wichtiger ist als Geschwindigkeit.
Eine Demonstration
Was kommt als nächstes
- Java Operatoren — die arithmetischen Operatoren
+,-,*,/,%, auf denenMathaufbaut. - Java Datentypen — warum
Math.powdoublezurückgibt und wann einintüberläuft. - Java Benutzereingabe mit Scanner — Zahlen und Text vom Terminal einlesen.