1. WebAssembly
  2. Reference
  3. WebAssembly numerische Anweisungen
  4. sqrt

Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

sqrt: Wasm-Textinstruktion

Die sqrt-Instruktion, kurz für square root (Quadratwurzel), wird verwendet, um die Quadratwurzel einer Zahl zu erhalten.

Probieren Sie es aus

(module
 (import "console" "log" (func $log (param f32)))
 (func $main
 f32.const 2 ;; load a number onto the stack
 f32.sqrt ;; calculate the square root
 call $log ;; log the result
 )
 (start $main)
)
const url = "{%wasm-url%}";
await WebAssembly.instantiateStreaming(fetch(url), { console });

Syntax

value_type.sqrt
value_type

Der Typ des Wertes, auf den die Instruktion angewendet wird. Die folgenden Typen unterstützen sqrt:

  • f32
  • f64
  • v128-Interpretationen:
    • f32x4
    • f64x2
sqrt

Die sqrt-Instruktion. Muss immer nach dem value_type und einem Punkt (.) eingefügt werden.

Typ

[input] -> [output]
input

Der Eingabewert.

output

Der Ausgabewert. Erfolgreiche Ergebnisse werden nur für positive Zahlen zurückgegeben; der Versuch, die Quadratwurzel einer negativen Zahl zu berechnen, liefert einen Ausgabewert von NaN.

Für eine nicht-SIMD sqrt sind dies grundlegende numerische Werte wie 3.5 oder 9.

Für eine SIMD sqrt sind dies v128 Wertinterpretationen, beispielsweise f32x4 9 3.8 -16 101. Jede Lane des auf den Stack geschobenen Ausgabewertes enthält die Quadratwurzel der entsprechenden Lane im Eingabewert.

Binärcodierung

Instruktion Binärformat Beispielt ext => binär
f32.sqrt 0x91 f32.sqrt => 0x91
f64.sqrt 0x9f f64.sqrt => 0x9f
f32x4.sqrt 0xfd 227:u32 f32x4.sqrt => 0xfd 0xe3 0x01
f64x2.sqrt 0xfd 239:u32 f64x2.sqrt => 0xfd 0xef 0x01

Beispiele

Verwendung von SIMD sqrt

In diesem Beispiel demonstrieren wir die Verwendung von sqrt, um die Quadratwurzeln aller Inhalte einer SIMD-Wertlane zu berechnen.

JavaScript

In unserem Skript greifen wir auf ein <p>-Element zu, an das wir unser Ergebnis ausgeben, und definieren dann ein Objekt zur Importierung in Wasm, das eine einzelne Funktion enthält, die einen Wert an das Ausgabeelement <p> schreibt. Wir kompilieren und instanziieren dann unser Wasm-Modul mit der Methode WebAssembly.instantiateStreaming(), wobei wir das Objekt im Prozess importieren.

<p></p>
js
const outputElem = document.querySelector("p");
const obj = {
 output(val) {
 outputElem.textContent += val;
 },
};
WebAssembly.instantiateStreaming(fetch("{%wasm-url%}"), {
 obj,
});

Wasm

In unserem Wasm-Modul importieren wir zuerst die JavaScript-output()-Funktion, wobei wir sicherstellen, dass sie einen f64-Parameter hat. Wir deklarieren dann einen SIMD f64x2-Wert und verwenden f64x2.sqrt, um die Quadratwurzeln aller Lanes zu berechnen. Schließlich extrahieren wir den in Lane 1 des Ausgabewertes gespeicherten Wert mit der extract_lane-Instruktion und geben ihn an das DOM aus, indem wir die importierte output()-Funktion aufrufen.

wat
(module
 ;; Import output function
 (import "obj" "output" (func $output (param f64)))
 (func $main
 ;; load a SIMD value onto the stack
 v128.const f64x2 811.5 9
 f64x2.sqrt ;; output all square roots in a new f64x2 value
 f64x2.extract_lane 0 ;; Extract a value from the result
 call $output
 )
 (start $main)
)

Ergebnis

Die Ausgabe ist wie folgt:

28.48683906648823 wird ausgegeben, da dies die Quadratwurzel des Wertes in Lane 1 des Eingabewertes (811.5) ist.

Help improve MDN

Erfahren Sie, wie Sie beitragen können Diese Seite wurde automatisch aus dem Englischen übersetzt.

AltStyle によって変換されたページ (->オリジナル) /