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

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

View in English Always switch to English

floor: Wasm Text-Instruktion

Die floor-Instruktion wird verwendet, um den Wert einer Zahl auf die nächste ganze Zahl nach unten abzurunden.

floor unterscheidet sich von trunc bei der Verwendung mit negativen Zahlen — floor rundet in diesen Fällen nach unten, während trunc nach oben rundet.

Probieren Sie es aus

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

Syntax

value_type.floor
value_type

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

  • f32
  • f64
  • v128 Interpretationen:
    • f32x4
    • f64x2
floor

Die floor-Instruktion. Sie muss immer nach dem value_type und einem Punkt (.) eingefügt werden.

Typ

[input] -> [output]
input

Die Eingabe-v128-Wertinterpretation.

output

Die Ausgabe-v128-Wertinterpretation.

Bei einem nicht-SIMD-floor sind dies grundlegende numerische Werte wie 14.3 oder 3.0.

Bei einem SIMD-floor sind dies v128-Wertinterpretationen, zum Beispiel f32x4 1.9 2.5 0.5 12.1. Jede Lane des in den Stack geschobenen Outputs ist der abgerundete Wert der entsprechenden Lane im Eingabewert.

Binärkodierung

Instruktion Binärformat Beispieltext => Binär
f32.floor 0x8e f32.floor => 0x8e
f64.floor 0x9c f64.floor => 0x9c
f32x4.floor 0xfd 104:u32 f32x4.floor => 0xfd 0x68
f64x2.floor 0xfd 117:u32 f64x2.floor => 0xfd 0x75

Beispiele

SIMD floor-Beispiel

In diesem Beispiel demonstrieren wir das Ausführen von floor auf einem SIMD-Wert und geben einen der Lane-Werte des Ergebnisses aus.

JavaScript

In unserem Skript greifen wir auf ein <p>-Element zu, zu dem wir unser Ergebnis ausgeben werden, und definieren dann ein Objekt zum Import in Wasm, das eine einzelne Funktion enthält, die einen Wert an das Ausgabefeld <p> schreibt. Wir kompilieren und instanziieren dann unser Wasm-Modul mithilfe der Methode WebAssembly.instantiateStreaming(), wobei wir gleichzeitig das Objekt 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 zunächst die JavaScript-Funktion output(), wobei wir sicherstellen, dass sie einen f64-Parameter hat. Dann deklarieren wir einen SIMD-f64x2-Wert und verwenden f64x2.floor, um jede Lane nach unten auf die nächste ganze Zahl zu runden. Schließlich extrahieren wir den Wert, der in Lane 0 des Ausgabewertes gespeichert ist, mithilfe der Instruktion extract_lane, 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 3.9 2000.1
 f64x2.floor ;; Round each value down
 f64x2.extract_lane 0 ;; Extract a value from the result
 call $output
 )
 (start $main)
)

Ergebnis

Die Ausgabe ist wie folgt:

3 wird ausgegeben, weil dies das Ergebnis des Abrundens von Lane 0 des Eingabewertes (3.9) auf die nächste ganze Zahl ist.

Help improve MDN

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

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