Signatur
Beschreibung
Math.asinh(x) berechnet den Areasinus hyperbolicus von x, also den Wert y, für den Math.sinh(y) === x gilt. Mathematisch entspricht das ln(x + √(x² + 1)). Die Funktion ist für alle reellen Zahlen definiert, streng monoton steigend und ungerade: Math.asinh(-x) === -Math.asinh(x).
Da asinh eine statische Methode von Math ist, wird sie immer als Math.asinh() aufgerufen und nicht über eine Instanz. Das Argument wird vorher mit der üblichen Zahlenumwandlung (ToNumber) in eine Zahl umgewandelt.
In der Praxis nutzt man Math.asinh() in Physik und Geometrie (z. B. Kettenlinie, Bogenlänge einer Parabel, Rapidität), aber auch in der Datenvisualisierung: Die asinh-Transformation verhält sich für große Beträge wie ein Logarithmus, ist aber im Gegensatz zu Math.log() auch für 0 und negative Werte definiert. Das macht sie zu einer beliebten Skala für Daten mit Vorzeichen und großem Wertebereich.
Gegenüber der „händischen“ Formel mit Math.log() und Math.sqrt() ist die eingebaute Methode numerisch deutlich robuster, besonders bei sehr kleinen und bei großen negativen Werten.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $x Pflicht | number | Die Zahl, deren inverser hyperbolischer Sinus berechnet werden soll. Nicht-numerische Werte werden in eine Zahl umgewandelt (z. B. "2" → 2). |
Rückgabewert
x. Bei ±Infinity kommt ±Infinity zurück, bei ±0 dasselbe vorzeichenbehaftete ±0, und NaN, wenn sich das Argument nicht in eine Zahl umwandeln lässt.Beispiele
Grundlegende Werte
console.log(Math.asinh(0)); // 0
console.log(Math.asinh(1)); // 0.881373587019543
console.log(Math.asinh(-1)); // -0.881373587019543
console.log(Math.asinh(2)); // 1.4436354751788103
console.log(Math.asinh(Infinity)); // Infinity
console.log(Math.asinh("abc")); // NaN
Umkehrung von Math.sinh()
const winkel = 3;
const sinusH = Math.sinh(winkel);
const zurueck = Math.asinh(sinusH);
// Wegen Gleitkomma-Rundung besser gerundet vergleichen
console.log(zurueck.toFixed(10));
console.log(Math.abs(zurueck - winkel) < Number.EPSILON * 10);
asinh-Skala für Diagrammdaten mit Vorzeichen
// Wie eine Log-Skala, aber auch für 0 und negative Werte gültig
const messwerte = [-1000, -10, 0, 10, 1000];
const skaliert = messwerte.map((wert) => Math.asinh(wert).toFixed(2));
console.log(skaliert);
// Math.log würde hier scheitern:
console.log(messwerte.map((wert) => Math.log(wert)));
Warum die eingebaute Methode genauer ist
// Naive Formel: ln(x + sqrt(x² + 1))
const asinhNaiv = (x) => Math.log(x + Math.sqrt(x * x + 1));
// Sehr kleine Werte: Auslöschung
console.log(asinhNaiv(1e-20)); // 0
console.log(Math.asinh(1e-20)); // 1e-20
// Große negative Werte: x + sqrt(...) wird 0
console.log(asinhNaiv(-1e10)); // -Infinity
console.log(Math.asinh(-1e10).toFixed(6)); // -23.718998
// Wichtig · Fallstricke
- Genauigkeit: Das Ergebnis hängt von der Implementierung ab. Die Spezifikation schreibt kein bitgenaues Ergebnis vor, deshalb können sich die letzten Nachkommastellen zwischen Engines (V8, SpiderMonkey, JavaScriptCore) unterscheiden. Vergleiche daher mit einer Toleranz, nicht mit
===. - Keine eigene Formel verwenden:
Math.log(x + Math.sqrt(x * x + 1))liefert bei sehr kleinenxdurch Auslöschung0, bei großen negativenx-Infinityund kann bei sehr großenxdurchx * xüberlaufen. - Vorzeichen der Null:
Math.asinh(-0)ergibt-0. Das spielt bei Divisionen eine Rolle (1 / -0 === -Infinity) und lässt sich mitObject.is()prüfen. - Typumwandlung:
Math.asinh(null)ergibt0,Math.asinh(undefined)ergibtNaN.BigInt-Werte lösen einenTypeErroraus. - Kompatibilität: Seit ES2015 in allen modernen Browsern und in Node.js verfügbar. Der Internet Explorer unterstützt die Methode nicht; dort braucht man ein Polyfill.