Start · Sprachen · JavaScript · Referenz · Float32Array

Float32Array

Klasse

Typisiertes Array für 32-Bit-Gleitkommazahlen (IEEE 754), dessen Byte-Reihenfolge von der Plattform abhängt.

seit JavaScript ES2015 Kategorie: core

Signatur

class Float32Array

Beschreibung

Float32Array ist ein typisiertes Array (TypedArray), das ausschließlich 32-Bit-Gleitkommazahlen (Single Precision, IEEE 754) speichert. Jedes Element belegt genau 4 Byte. Die Byte-Reihenfolge (Endianness) richtet sich nach der Host-Plattform – in der Praxis ist das auf x86/x64-Systemen Little-Endian.

Das Array eignet sich besonders für rechenintensive Anwendungen, bei denen Speicher und Performance eine Rolle spielen: WebGL-Vertex-Daten, Audio-Verarbeitung mit der Web Audio API, wissenschaftliche Berechnungen oder maschinelles Lernen im Browser. Gegenüber normalen JavaScript-Number-Arrays bietet es einen kompakteren Speicher-Footprint (4 statt 8 Byte pro Zahl) auf Kosten der Präzision.

Alle allgemeinen Methoden typisierter Arrays stehen zur Verfügung: map, filter, reduce, slice, set, subarray usw. Ein Float32Array kann auf einem bestehenden ArrayBuffer oder SharedArrayBuffer aufgebaut werden, um Speicher gemeinsam mit anderen Views zu nutzen.

Wichtig: Da 32-Bit-Floats nur ca. 7 signifikante Dezimalstellen besitzen, können Werte, die als JavaScript-Number (64-Bit Float) exakt darstellbar sind, beim Speichern in einem Float32Array gerundet werden. Für hohe numerische Präzision sollte stattdessen Float64Array verwendet werden.

Parameter

Name Typ Default Beschreibung
$length number Anzahl der Elemente. Erzeugt ein neues, mit Nullen initialisiertes Array der angegebenen Länge.
$typedArray TypedArray Ein beliebiges typisiertes Array, dessen Werte in ein neues Float32Array konvertiert und kopiert werden.
$object Iterable|ArrayLike Ein iterierbares oder array-ähnliches Objekt (z. B. ein normales Array), dessen Einträge in Float32Array-Elemente umgewandelt werden.
$buffer ArrayBuffer|SharedArrayBuffer Ein existierender Puffer, auf dem die View aufgebaut wird. Kann mit byteOffset und length kombiniert werden.
$byteOffset number 0 Byte-Offset innerhalb des buffer, ab dem die View beginnt. Muss ein Vielfaches von 4 sein.
$length number Anzahl der Elemente innerhalb des buffer (ab byteOffset). Wird weggelassen, erstreckt sich die View bis zum Ende des Puffers.

Rückgabewert

Typ
Float32Array
Beschreibung
Eine neue Float32Array-Instanz, die einen ArrayBuffer als Hintergrundspeicher verwendet.

Beispiele

Einfaches Float32Array erstellen und befüllen

// Aus einem normalen Array erzeugen
const temperatures = new Float32Array([36.6, 37.1, 38.5, 36.9]);
console.log(temperatures[0]); // 36.599998474121094 (Rundung durch 32-Bit-Präzision)
console.log(temperatures.length); // 4
console.log(temperatures.byteLength); // 16 (4 Elemente × 4 Byte)

// Element setzen
temperatures[1] = 37.2;
console.log(temperatures[1]); // 37.20000076293945

// Über Elemente iterieren
temperatures.forEach((val, i) => {
  console.log(`Index ${i}: ${val}`);
});
36.599998474121094 4 16 37.20000076293945 Index 0: 36.599998474121094 Index 1: 37.20000076293945 Index 2: 38.5 Index 3: 36.900001525878906

WebGL-Vertex-Daten mit gemeinsam genutztem ArrayBuffer

// Drei 2D-Punkte als Float32Array für WebGL
const buffer = new ArrayBuffer(24); // 6 Floats × 4 Byte
const vertices = new Float32Array(buffer);

// Dreieck-Koordinaten setzen (x, y je Punkt)
vertices.set([
   0.0,  0.5,  // Punkt 1
  -0.5, -0.5,  // Punkt 2
   0.5, -0.5   // Punkt 3
]);

console.log(vertices); // Float32Array(6) [0, 0.5, -0.5, -0.5, 0.5, -0.5]

// Subarray für den ersten Punkt
const firstPoint = vertices.subarray(0, 2);
console.log(firstPoint); // Float32Array(2) [0, 0.5]

// Mit WebGL verwenden (pseudocode)
// gl.bufferData(gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW);

// Werte skalieren mit map
const scaled = vertices.map(v => v * 2);
console.log(scaled); // Float32Array(6) [0, 1, -1, -1, 1, -1]
Float32Array(6) [0, 0.5, -0.5, -0.5, 0.5, -0.5] Float32Array(2) [0, 0.5] Float32Array(6) [0, 1, -1, -1, 1, -1]

Float32Array mit Float32Array.from() und Mapping

// Gradwerte in Bogenmaß umrechnen
const degrees = [0, 30, 45, 60, 90, 180];
const radians = Float32Array.from(degrees, deg => (deg * Math.PI) / 180);

console.log(radians[5]); // 3.1415927410125732 (Pi als 32-Bit-Float)
console.log(Math.PI);    // 3.141592653589793  (64-Bit-Referenz)

// Statische of()-Methode
const specific = Float32Array.of(1.1, 2.2, 3.3);
console.log(specific); // Float32Array(3) [1.100000023841858, 2.200000047683716, 3.299999952316284]
3.1415927410125732 3.141592653589793 Float32Array(3) [1.100000023841858, 2.200000047683716, 3.299999952316284]

// Wichtig · Fallstricke

Präzisionsverlust: 32-Bit-Floats besitzen nur ca. 7 signifikante Dezimalstellen. Dezimalwerte wie 0.1 oder 36.6 werden gerundet. Für präzise Berechnungen Float64Array bevorzugen.

Endianness: Die Byte-Reihenfolge ist plattformabhängig. Beim Serialisieren/Deserialisieren von Binärdaten über Netzwerk oder Datei sollte stattdessen DataView mit expliziten getFloat32/setFloat32-Methoden und dem littleEndian-Parameter verwendet werden.

Speicherfreigabe: Ein Float32Array hält eine Referenz auf seinen ArrayBuffer. Solange die View oder der Buffer erreichbar sind, wird kein Speicher freigegeben. Bei sehr großen Puffern auf explizites Aufräumen (Dereferenzieren) achten.

Browser-Kompatibilität: Float32Array ist in allen modernen Browsern und Node.js (ab v0.10) unterstützt und gilt als Baseline-Feature.