Start · Sprachen · JavaScript · Referenz · new Float64Array()

new Float64Array()

Methode

Erstellt ein typisiertes Array aus 64-Bit-Gleitkommazahlen (IEEE 754, doppelte Genauigkeit) mit einer Länge, aus einem Array bzw. Iterable oder als Sicht auf einen <code>ArrayBuffer</code>.

seit JavaScript ES2015 (Baseline: alle Browser, Node.js 0.10+) Kategorie: method-property

Signatur

new Float64Array(lengthOrArrayOrBuffer, byteOffset, length)

Beschreibung

Der Konstruktor Float64Array() erzeugt ein typisiertes Array, dessen Elemente jeweils 8 Byte belegen und als 64-Bit-Gleitkommazahlen im Format IEEE 754 gespeichert werden. Das ist genau dasselbe Zahlenformat wie beim normalen JavaScript-Typ number. Werte gehen beim Speichern also nicht an Genauigkeit verloren. Alle Elemente werden mit 0 vorbelegt.

Der Konstruktor kennt mehrere Aufrufvarianten:

  • new Float64Array() oder new Float64Array(length): Es wird ein neuer, mit Nullen gefüllter Puffer mit length × 8 Byte angelegt.
  • new Float64Array(typedArray): Die Werte eines anderen typisierten Arrays werden kopiert und dabei in Gleitkommazahlen umgewandelt.
  • new Float64Array(object): Übernimmt die Werte aus einem Array, einem Iterable (z. B. Set oder einem Generator) oder einem array-ähnlichen Objekt.
  • new Float64Array(buffer, byteOffset, length): Legt eine Sicht auf einen vorhandenen ArrayBuffer oder SharedArrayBuffer an. Dabei wird nichts kopiert, Änderungen wirken sich direkt auf den Puffer aus.

Typische Einsatzgebiete sind numerische Berechnungen, Signalverarbeitung, wissenschaftliche Daten, WebGL/WebGPU (mit hoher Genauigkeit), WebAssembly-Speicher und binäre Dateiformate. Wenn einfache Genauigkeit reicht und Speicher knapp ist, eignet sich Float32Array besser, denn es braucht nur halb so viel Speicher.

Parameter

Name Typ Default Beschreibung
$length number 0 Anzahl der Elemente. Es werden length × 8 Byte reserviert, alle Werte sind 0.
$typedArray TypedArray Ein anderes typisiertes Array, dessen Werte in ein neues Array kopiert werden. Mit BigInt64Array oder BigUint64Array ist das nicht möglich, dann wird ein TypeError ausgelöst.
$object Array | Iterable | ArrayLike Ein Array, ein Iterable oder ein array-ähnliches Objekt. Jeder Wert wird mit Number() umgewandelt.
$buffer ArrayBuffer | SharedArrayBuffer Ein vorhandener Puffer, auf den das neue Array als Sicht zugreift. Die Daten werden nicht kopiert.
$byteOffset number 0 Startposition in Byte innerhalb von buffer. Muss ein Vielfaches von 8 sein.
$length number (buffer.byteLength - byteOffset) / 8 Anzahl der Elemente der Sicht, wenn ein buffer übergeben wird. Fehlt die Angabe, reicht die Sicht bis zum Ende des Puffers.

Rückgabewert

Typ
Float64Array
Beschreibung
Ein neues Float64Array-Objekt. Es enthält eigene Daten oder ist eine Sicht auf den übergebenen Puffer.

Beispiele

Die verschiedenen Aufrufvarianten

// Nach Länge
const leer = new Float64Array(3);
console.log(leer); // alle Werte 0

// Aus einem Array
const werte = new Float64Array([1.5, Math.PI, -0.25]);
console.log(werte[1]);

// Aus einem Iterable (Set)
const ausSet = new Float64Array(new Set([10, 20, 30]));
console.log(ausSet.length);

// Kopie eines anderen typisierten Arrays
const ints = new Int16Array([1, 2, 3]);
const floats = new Float64Array(ints);
floats[0] = 0.5;
console.log(ints[0], floats[0]);
Float64Array(3) [0, 0, 0] 3.141592653589793 3 1 0.5

Sicht auf einen ArrayBuffer mit Offset

const buffer = new ArrayBuffer(32); // Platz für 4 Doubles

// Sicht auf die Elemente 1 und 2 (Byte 8 bis 23)
const mitte = new Float64Array(buffer, 8, 2);
mitte[0] = 42.42;
mitte[1] = -1e-10;

// Gesamtsicht auf denselben Speicher
const gesamt = new Float64Array(buffer);
console.log(gesamt);
console.log(mitte.byteOffset, mitte.byteLength);
Float64Array(4) [0, 42.42, -1e-10, 0] 8 16

Praxis: Mittelwert und Standardabweichung von Messwerten

const statistik = (daten) => {
  const n = daten.length;
  const mittel = daten.reduce((s, x) => s + x, 0) / n;
  const varianz = daten.reduce((s, x) => s + (x - mittel) ** 2, 0) / n;
  return { mittel, stdAbw: Math.sqrt(varianz) };
};

// Messwerte z. B. aus einem Sensor oder Worker
const messwerte = Float64Array.from({ length: 5 }, (_, i) => 20 + i * 0.5);
console.log(messwerte);
console.log(statistik(messwerte));
Float64Array(5) [20, 20.5, 21, 21.5, 22] { mittel: 21, stdAbw: 0.7071067811865476 }

// Wichtig · Fallstricke

  • Nur mit new aufrufen: Float64Array([1, 2]) ohne new löst einen TypeError aus.
  • Ausrichtung: byteOffset muss ein Vielfaches von 8 sein, sonst gibt es einen RangeError. Auch buffer.byteLength - byteOffset muss durch 8 teilbar sein, wenn keine length angegeben ist. Für nicht ausgerichtete Daten eignet sich DataView.prototype.getFloat64().
  • Byte-Reihenfolge: Typisierte Arrays verwenden die Byte-Reihenfolge der Plattform (praktisch immer Little-Endian). Für Netzwerkprotokolle oder Dateiformate mit fester Byte-Reihenfolge ist DataView die bessere Wahl.
  • Sicht oder Kopie: Wird ein ArrayBuffer übergeben, entsteht eine Sicht, die sich den Speicher mit dem Puffer teilt. Wird ein Array oder typisiertes Array übergeben, werden die Werte kopiert.
  • Umwandlung: Nicht-numerische Werte werden mit Number() umgewandelt. "abc" wird zu NaN, undefined ebenfalls. BigInt-Werte lösen einen TypeError aus.
  • Feste Länge: Die Länge ist fest, es gibt kein push() und kein pop(). Ausnahme: eine Sicht ohne length auf einen größenveränderlichen ArrayBuffer (ES2024) wächst und schrumpft mit dem Puffer mit.
  • Speicher: Sehr große Längen können einen RangeError auslösen, wenn nicht genug Speicher reserviert werden kann.