Signatur
Beschreibung
Math.log1p(x) berechnet mathematisch ln(1 + x). Der Vorteil gegenüber Math.log(1 + x) liegt in der Genauigkeit bei sehr kleinen Werten. Liegt x nahe 0 (z. B. 1e-16), wird der Ausdruck 1 + x als Gleitkommazahl auf genau 1 gerundet, und Math.log(1 + x) liefert dann 0. Math.log1p() umgeht diesen Rundungsfehler und gibt ein nahezu exaktes Ergebnis zurück.
Typische Einsatzgebiete sind Finanzmathematik (stetige Verzinsung bei kleinen Zinssätzen), Statistik (Log-Likelihood, log-transformierte Daten mit Nullwerten), maschinelles Lernen (z. B. Softplus log(1 + e^x)) und Physik. Die Umkehrfunktion ist Math.expm1(), die ex − 1 ebenso präzise berechnet.
Da log1p eine statische Methode von Math ist, ruft man sie immer als Math.log1p() auf – Math ist kein Konstruktor.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $x Pflicht | number | Eine Zahl größer oder gleich -1. Andere Typen werden per Number()-Umwandlung konvertiert. |
Rückgabewert
x + 1. Bei x = -1 ist das Ergebnis -Infinity, bei x < -1 oder nicht konvertierbaren Werten NaN. Math.log1p(0) ergibt 0, Math.log1p(-0) ergibt -0.Beispiele
Grundlegende Werte und Grenzfälle
console.log(Math.log1p(0)); // ln(1)
console.log(Math.log1p(1)); // ln(2)
console.log(Math.log1p(Math.E - 1)); // ln(e)
console.log(Math.log1p(-1)); // ln(0)
console.log(Math.log1p(-2)); // ungültig
console.log(Math.log1p('3')); // String wird umgewandelt
Genauigkeit gegenüber Math.log(1 + x)
const x = 1e-16;
console.log(Math.log(1 + x)); // 1 + x wird zu 1 gerundet
console.log(Math.log1p(x)); // korrektes Ergebnis
Stetigen Zinssatz aus Jahreszins berechnen
// Effektiver Jahreszins -> stetiger Zinssatz r = ln(1 + i)
const toContinuousRate = (annualRate) => Math.log1p(annualRate);
const rate = toContinuousRate(0.0001); // 0,01 % p. a.
console.log(rate.toExponential(10));
// Rückrechnung mit der Umkehrfunktion Math.expm1()
console.log(Math.expm1(rate));
Log-Transformation von Daten mit Nullwerten
// log1p ist praktisch, weil log1p(0) = 0 statt -Infinity
const pageViews = [0, 3, 12, 150, 9800];
const scaled = pageViews.map((v) => Number(Math.log1p(v).toFixed(3)));
console.log(scaled);
// Wichtig · Fallstricke
- Definitionsbereich: Nur Werte
x ≥ -1sind gültig.Math.log1p(-1)liefert-Infinity, kleinere Werte liefernNaN– eine Ausnahme wird nicht geworfen. Eingaben aus Benutzerformularen sollten daher vorher geprüft werden. - Typumwandlung: Argumente werden implizit umgewandelt:
Math.log1p(null)ergibt0,Math.log1p(undefined)ergibtNaN.BigInt-Werte lösen einenTypeErroraus. - Präzision: Das genaue Ergebnis kann je nach JavaScript-Engine in der letzten Nachkommastelle leicht abweichen, weil die Spezifikation die exakte Implementierung offenlässt.
- Kompatibilität: Seit ES2015 in allen modernen Browsern und in Node.js verfügbar. Nur sehr alte Umgebungen (z. B. Internet Explorer) benötigen ein Polyfill.