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

Math.exp()

Methode

Die statische Methode <code>Math.exp()</code> gibt die Eulersche Zahl <em>e</em> hoch <code>x</code> zurück, also e<sup>x</sup>.

seit JavaScript ES1 (Baseline: alle Browser) Kategorie: method-property

Signatur

Math.exp(x)

Beschreibung

Math.exp(x) berechnet die natürliche Exponentialfunktion ex, wobei e die Eulersche Zahl (ca. 2,71828, verfügbar als Math.E) ist. Sie ist die Umkehrfunktion von Math.log(): Für positive Zahlen gilt Math.exp(Math.log(y)) ≈ y.

Typische Einsatzgebiete sind stetiges Wachstum und Zerfall (Zinseszins, radioaktiver Zerfall, Abkühlung), Statistik und maschinelles Lernen (Sigmoid-, Softmax- und Normalverteilungsfunktionen) sowie Animationen mit exponentiellem Abklingen (Easing, Dämpfung).

Da exp eine statische Methode von Math ist, wird sie immer als Math.exp() aufgerufen – Math ist kein Konstruktor. Das Argument wird vorher in eine Zahl umgewandelt; nicht umwandelbare Werte ergeben NaN.

Parameter

Name Typ Default Beschreibung
$x Pflicht number Der Exponent. Andere Typen werden per Number()-Konvertierung in eine Zahl umgewandelt.

Rückgabewert

Typ
number
Beschreibung
ex als nicht-negative Zahl. Math.exp(-Infinity) ergibt 0, Math.exp(Infinity) ergibt Infinity, NaN ergibt NaN.

Beispiele

Grundlegende Werte

console.log(Math.exp(0));   // e^0
console.log(Math.exp(1));   // e^1 = Math.E
console.log(Math.exp(-1));  // 1/e
console.log(Math.exp(2));
console.log(Math.exp(-Infinity));
console.log(Math.exp('abc'));
1 2.718281828459045 0.36787944117144233 7.38905609893065 0 NaN

Stetige Verzinsung berechnen

// K = K0 * e^(r * t)
const endkapital = (startkapital, zinssatz, jahre) =>
  startkapital * Math.exp(zinssatz * jahre);

const ergebnis = endkapital(10_000, 0.03, 10);
console.log(ergebnis.toFixed(2));
13498.59

Sigmoid-Funktion und numerisch stabiles Softmax

const sigmoid = (x) => 1 / (1 + Math.exp(-x));
console.log(sigmoid(0), sigmoid(4).toFixed(4));

// Maximum abziehen verhindert Überlauf bei großen Werten
const softmax = (werte) => {
  const max = Math.max(...werte);
  const exps = werte.map((v) => Math.exp(v - max));
  const summe = exps.reduce((a, b) => a + b, 0);
  return exps.map((e) => +(e / summe).toFixed(3));
};

console.log(softmax([1000, 1001, 1002]));
0.5 '0.9820' [ 0.09, 0.245, 0.665 ]

Exponentielles Abklingen in einer Animation

// Dämpfung: Amplitude halbiert sich alle 'halbwertszeit' ms
const amplitude = (t, start = 100, halbwertszeit = 500) =>
  start * Math.exp((-Math.LN2 * t) / halbwertszeit);

for (const t of [0, 500, 1000, 1500]) {
  console.log(`${t} ms: ${amplitude(t).toFixed(1)}`);
}
0 ms: 100.0 500 ms: 50.0 1000 ms: 25.0 1500 ms: 12.5

// Wichtig · Fallstricke

  • Überlauf: Ab etwa x > 709,78 liefert Math.exp(x) Infinity; für x < -745,13 ergibt sich 0. Bei Softmax o. Ä. vorher das Maximum abziehen.
  • Genauigkeit bei kleinen x: Math.exp(x) - 1 verliert für sehr kleine x (z. B. 1e-10) stark an Genauigkeit. Verwenden Sie stattdessen Math.expm1(x).
  • Die Ergebnisse sind implementierungsabhängig und können sich zwischen Engines (V8, SpiderMonkey, JavaScriptCore) in der letzten Nachkommastelle unterscheiden – für exakte Vergleiche nicht auf Bit-Gleichheit verlassen.
  • Math.exp(x) entspricht mathematisch Math.E ** x, ist aber meist präziser und schneller.
  • BigInt-Werte werden nicht unterstützt: Math.exp(1n) wirft einen TypeError.