Math.f16round()

Limited availability

This feature is not Baseline because it does not work in some of the most widely-used 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

構文

js
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 ビットでも同じです。

js
Math.f16round(1.5); // 1.5
Math.f16round(1.5) === 1.5; // true

しかし、 1.337 という数字は 2 進法では正確に表すことができないため、 16 ビットと 64 ビットでは差が出ます。

js
Math.f16round(1.337); // 1.3369140625
Math.f16round(1.337) === 1.337; // false

100000 は 16 ビット浮動小数点では大きすぎるので、 Infinity が返されます。

js
Math.f16round(100000); // Infinity

仕様書

Specification
Float16Array
# sec-math.f16round

ブラウザーの互換性

Report problems with this compatibility data on GitHub
desktopmobileserver
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Deno
Node.js
f16round

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support
No support
No support

関連情報