floor: Wasm-Textanweisung
Die floor-Anweisung wird verwendet, um den Wert einer Zahl auf die nächste ganze Zahl abzurunden.
floor unterscheidet sich von trunc, wenn es auf negative Zahlen angewendet wird — floor wird in solchen Fällen abrunden, während trunc aufrundet.
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 den die Anweisung angewendet wird. Die folgenden Typen unterstützen
floor:f32f64v128-Interpretationen:f32x4f64x2
floor-
Die
floor-Anweisung. Muss immer nach demvalue_typeund einem Punkt (.) eingeschlossen werden.
Typ
[input] -> [output]
Für eine nicht-SIMD-floor sind dies grundlegende numerische Werte wie 14.3 oder 3.0.
Für eine SIMD-floor sind dies v128-Wert-Interpretationen, zum Beispiel f32x4 1.9 2.5 0.5 12.1. Jede Spur der Ausgabe, die auf den Stack geschoben wird, ist der abgerundete Wert der entsprechenden Spur im Eingabewert.
Binäre Kodierung
| Anweisung | 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
>Beispiel für SIMD floor
In diesem Beispiel demonstrieren wir das Ausführen von floor auf einen SIMD-Wert und geben einen der Spurwerte des Ergebnisses aus.
JavaScript
In unserem Skript greifen wir auf ein <p>-Element zu, in das wir unser Ergebnis ausgeben werden, und definieren dann ein Objekt zum Importieren in Wasm, das eine einzige Funktion enthält, die einen Wert an das Ausgabeelement <p> schreibt. Dann kompilieren und instanziieren wir unser Wasm-Modul mit der Methode WebAssembly.instantiateStreaming(), wobei wir das Objekt importieren.
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-Funktion output(), wobei wir sicherstellen, dass sie einen f64-Parameter hat. Wir deklarieren dann einen SIMD-f64x2-Wert und verwenden f64x2.floor, um jede Spur auf die nächstgelegene ganze Zahl abzurunden. Schließlich extrahieren wir den in Spur 0 des Ausgabewertes gespeicherten Wert mit der Anweisung extract_lane, und geben ihn an das DOM aus, indem wir die importierte output()-Funktion aufrufen.
(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, da dies das Ergebnis des Abrundens von Spur 0 des Eingabewertes (3.9) zur nächsten ganzen Zahl ist.