Start · Sprachen · JavaScript · Referenz · Math.SQRT1_2

Math.SQRT1_2

Eigenschaft

Die statische Konstante <code>Math.SQRT1_2</code> enthält die Quadratwurzel von 1/2, also etwa <code>0.7071067811865476</code>.

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

Signatur

Math.SQRT1_2

Beschreibung

Math.SQRT1_2 ist eine statische, schreibgeschützte Dateneigenschaft des Math-Objekts. Sie enthält den Wert √½ ≈ 0,7071067811865476. Das ist derselbe Wert wie 1/√2 und wie Math.SQRT2 / 2.

Die Konstante kommt oft in Geometrie, Grafik und Signalverarbeitung vor. Beispiele: Sinus und Kosinus von 45° (π/4), das Normalisieren diagonaler Bewegungsvektoren in Spielen, die Umrechnung von Spitzenwert in Effektivwert (RMS) bei Sinussignalen und die Koeffizienten der Haar-Wavelet-Transformation.

Da Math kein Konstruktor ist, greift man immer direkt über Math.SQRT1_2 auf die Konstante zu. Eine Instanz braucht man nicht. Die Eigenschaft hat die Attribute nicht beschreibbar, nicht aufzählbar und nicht konfigurierbar.

Beispiele

Wert ausgeben und mit Alternativen vergleichen

console.log(Math.SQRT1_2);
console.log(Math.SQRT1_2 === 1 / Math.SQRT2);
console.log(Math.SQRT1_2 === Math.sqrt(0.5));
console.log(Math.cos(Math.PI / 4));
0.7071067811865476 true true 0.7071067811865476

Diagonale Bewegung in einem Spiel normalisieren

const speed = 200; // Pixel pro Sekunde

const move = (dx, dy, dt) => {
  // Bei diagonaler Eingabe wäre der Vektor sonst √2-mal zu lang
  const factor = dx !== 0 && dy !== 0 ? Math.SQRT1_2 : 1;
  return {
    x: dx * factor * speed * dt,
    y: dy * factor * speed * dt,
  };
};

console.log(move(1, 0, 1));
console.log(move(1, 1, 1));
{ x: 200, y: 0 } { x: 141.4213562373095, y: 141.4213562373095 }

Effektivwert (RMS) einer Sinusspannung berechnen

const peakToRms = (peak) => peak * Math.SQRT1_2;

// Netzspannung: Spitzenwert ca. 325 V
console.log(peakToRms(325).toFixed(1) + ' V');
229.8 V

Schreibschutz der Konstante

'use strict';
try {
  Math.SQRT1_2 = 1;
} catch (err) {
  console.log(err instanceof TypeError);
}
console.log(Math.SQRT1_2);
true 0.7071067811865476

// Wichtig · Fallstricke

  • Schreibgeschützt: Eine Zuweisung wie Math.SQRT1_2 = 1 wird im nicht strikten Modus stillschweigend ignoriert. Im strikten Modus wirft sie einen TypeError.
  • Gleitkomma-Genauigkeit: Der Wert ist nur eine Annäherung an √½. Math.SQRT1_2 * Math.SQRT1_2 ergibt deshalb 0.5000000000000001 und nicht genau 0.5. Zahlen vergleicht man daher besser mit einer Toleranz, etwa Number.EPSILON.
  • Konstante statt Berechnung: Math.SQRT1_2 lesbarer und ein wenig schneller als ein wiederholter Aufruf von Math.sqrt(0.5), liefert aber denselben Wert.
  • Kompatibilität: Die Konstante ist seit ECMAScript 1 Teil der Sprache und funktioniert in allen Browsern, in Node.js, Deno und Bun.