Start · Sprachen · JavaScript · Referenz · Math.cbrt()

Math.cbrt()

Methode

Die statische Methode <code>Math.cbrt()</code> gibt die Kubikwurzel (dritte Wurzel) einer Zahl zurück, auch für negative Werte.

seit JavaScript ES2015 Kategorie: method-property

Signatur

Math.cbrt(x)

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

Typ
number
Beschreibung
Die Kubikwurzel von 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
3 -2 1.2599210498948732 -0 Infinity 4 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`);
10 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));
}
-27 -3 NaN 64 4 3.9999999999999996 1000 10 9.999999999999998

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)));
[ '0.9283', '0.7937', '0.6694' ]

// Wichtig · Fallstricke

  • Negative Zahlen: Mit x ** (1/3) oder Math.pow(x, 1/3) bekommst du für negative x NaN. Für echte Kubikwurzeln nimmst du deshalb Math.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 wie Number.EPSILON.
  • Vorzeichen von Null: Math.cbrt(-0) ergibt -0. Das lässt sich mit Object.is() erkennen.
  • BigInt: Ein BigInt als Argument löst einen TypeError aus. Wandle es vorher mit Number() 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).