Signatur
Beschreibung
Math.cbrt(x) berechnet die Kubikwurzel von x, also die Zahl y, für die y * y * y === x gilt. Da cbrt eine statische Methode von Math ist, rufst du sie immer als Math.cbrt() auf und nie über eine Instanz.
Anders als Math.pow(x, 1/3) bzw. x ** (1/3) kommt Math.cbrt() auch mit negativen Zahlen richtig zurecht: Math.cbrt(-8) ergibt -2, während (-8) ** (1/3) NaN liefert. Dazu kommt, dass 1/3 als Gleitkommazahl nicht exakt darstellbar ist. Deshalb liefert Math.cbrt() bei ganzzahligen Kuben meist das genauere Ergebnis, z. B. genau 3 für 27.
Typische Einsatzgebiete sind Geometrie (die Kantenlänge eines Würfels aus seinem Volumen), Physik und Statistik sowie Farbräume wie CIELAB oder OKLab, deren Umrechnungen mit Kubikwurzeln arbeiten. Wenn das Argument keine Zahl ist, wird es vorher mit Number() umgewandelt.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $x Pflicht | number | Die Zahl, deren Kubikwurzel berechnet wird. Andere Typen werden mit Number() in eine Zahl umgewandelt. |
Rückgabewert
x. Bei negativem x ist das Ergebnis negativ. NaN, ±0 und ±Infinity werden unverändert zurückgegeben. Nicht umwandelbare Werte ergeben NaN.Beispiele
Grundlegende Werte und Sonderfälle
console.log(Math.cbrt(27)); // 3
console.log(Math.cbrt(-8)); // -2
console.log(Math.cbrt(2)); // 1.2599210498948732
console.log(Math.cbrt(-0)); // -0
console.log(Math.cbrt(Infinity)); // Infinity
console.log(Math.cbrt('64')); // 4 (String wird umgewandelt)
console.log(Math.cbrt('abc')); // NaN
Kantenlänge eines Würfels aus dem Volumen
const kantenlaenge = (volumen) => {
if (volumen < 0) throw new RangeError('Volumen darf nicht negativ sein');
return Math.cbrt(volumen);
};
// Ein Würfel mit 1 Liter = 1000 cm³
console.log(`${kantenlaenge(1000)} cm`);
Unterschied zu ** (1/3) bei negativen Zahlen
const werte = [-27, 64, 1000];
for (const v of werte) {
console.log(v, Math.cbrt(v), v ** (1 / 3));
}
OKLab-Hilfsfunktion: lineare Werte in Kubikwurzeln umrechnen
// Vereinfachter Teilschritt der OKLab-Farbraum-Umrechnung
const lms = [0.8, 0.5, 0.3];
const lmsWurzel = lms.map(Math.cbrt);
console.log(lmsWurzel.map((n) => n.toFixed(4)));
// Wichtig · Fallstricke
- Negative Zahlen: Mit
x ** (1/3)oderMath.pow(x, 1/3)bekommst du für negativexNaN. Für echte Kubikwurzeln nimmst du deshalbMath.cbrt(). - Gleitkomma-Genauigkeit: Auch
Math.cbrt()rechnet mit IEEE-754-Doubles. Für nicht-perfekte Kuben ist das Ergebnis eine Näherung. Vergleiche Ergebnisse daher nicht mit===, sondern mit einer Toleranz wieNumber.EPSILON. - Vorzeichen von Null:
Math.cbrt(-0)ergibt-0. Das lässt sich mitObject.is()erkennen. - BigInt: Ein
BigIntals Argument löst einenTypeErroraus. Wandle es vorher mitNumber()um (Präzisionsverlust bei großen Werten möglich). - Kompatibilität: Seit ES2015 in allen modernen Browsern und in Node.js verfügbar. Nur der Internet Explorer unterstützt die Methode nicht. Als Polyfill dient z. B.
x < 0 ? -Math.pow(-x, 1/3) : Math.pow(x, 1/3).