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

Math.log1p()

Methode

Gibt den natürlichen Logarithmus (Basis e) von <code>1 + x</code> zurück – auch bei sehr kleinen Werten von <code>x</code> numerisch genau.

seit JavaScript ES2015 Kategorie: method-property

Signatur

Math.log1p(x)

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

Typ
number
Beschreibung
Der natürliche Logarithmus von 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
0 0.6931471805599453 1 -Infinity NaN 1.3862943611198906

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
0 1e-16

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));
9.9995000333e-5 0.0001

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);
[0, 1.386, 2.565, 5.017, 9.19]

// Wichtig · Fallstricke

  • Definitionsbereich: Nur Werte x ≥ -1 sind gültig. Math.log1p(-1) liefert -Infinity, kleinere Werte liefern NaN – eine Ausnahme wird nicht geworfen. Eingaben aus Benutzerformularen sollten daher vorher geprüft werden.
  • Typumwandlung: Argumente werden implizit umgewandelt: Math.log1p(null) ergibt 0, Math.log1p(undefined) ergibt NaN. BigInt-Werte lösen einen TypeError aus.
  • 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.