Math.f16round()
Baseline 2025Newly available
Since April 2025, this feature works across the latest devices and browser versions. This feature might not work in older devices or browsers.
Math.f16round()
は静的メソッドで、数値に最も近い 16 ビット半精度浮動小数点表現を返します。
試してみましょう
console.log(Math.f16round(5.5));
// Expected output: 5.5
console.log(Math.f16round(5.05));
// Expected output: 5.05078125
console.log(Math.f16round(5));
// Expected output: 5
console.log(Math.f16round(-5.05));
// Expected output: -5.05078125
構文
Math.f16round(doubleFloat)
引数
doubleFloat
-
数値です。
返値
doubleFloat
に最も近い 16 ビット半精度浮動小数点表現です。
解説
Math.f16round
は、 Math.fround()
の 16 ビット版です。これは、 Float16Array
から読み込む場合など、 float16 の数値を操作する際に、意図通りに動作します。内部的には、JavaScript で数値は引き続き 64 ビット浮動小数点数として扱い、仮数部の 10 ビット目で「偶数への丸め」を行い、続く仮数部のビットすべてを 0 に設定します。数値が 16 ビット浮動小数点数の範囲外である場合、 Infinity
または -Infinity
が返値として返されます。
f16round()
は Math
の静的メソッドであるため、生成した Math
オブジェクトのメソッドとしてではなく、常に Math.f16round()
として使用するようにしてください(Math
はコンストラクターではありません)。
例
Math.f16round() の使用
1.5 という数字は 2 進法で正確に表すことができ、 16 ビットでも 64 ビットでも同じです。
Math.f16round(1.5); // 1.5
Math.f16round(1.5) === 1.5; // true
しかし、 1.337 という数字は 2 進法では正確に表すことができないため、 16 ビットと 64 ビットでは差が出ます。
Math.f16round(1.337); // 1.3369140625
Math.f16round(1.337) === 1.337; // false
100000 は 16 ビット浮動小数点では大きすぎるので、 Infinity
が返されます。
Math.f16round(100000); // Infinity
仕様書
Specification |
---|
Float16Array # sec-math.f16round |