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 ビット半精度浮動小数点表現を返します。

試してみましょう

構文

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

ブラウザーの互換性

BCD tables only load in the browser

関連情報