JavaScript/Math/fround

カテゴリ:Book:JavaScript#Math/fround%20

Math.fround(x) は、引数 x を最も近い32ビット単精度浮動小数点数に丸めた値を返します。これは、x の値を32ビット単精度浮動小数点数として表現するために使用されます[1]

  • 引数 xNaN の場合、NaN を返します。
  • 引数 x+0 の場合、+0 を返します。
  • 引数 x-0 の場合、-0 を返します。
  • 引数 xInfinity の場合、Infinity を返します。
  • 引数 x-Infinity の場合、-Infinity を返します。

32ビット単精度浮動小数点数に丸めるプログラム

以下のプログラムは、ユーザーが入力した値を32ビット単精度浮動小数点数に丸めます。

const f = p => {
  for (;;) {
    a = prompt(`${p}は何ですか?`);
    if (!isNaN(a))
      return a;
    alert(`${p}に、入力ミスがあります。 "${a}"`);
  }
}

for (;;) {
  const x = f("値");
  const fround = Math.fround(x);
  if (!isNaN(fround)) {
    alert(`${x} を32ビット単精度浮動小数点数に丸めると ${fround.toFixed(3)} です。`);
    break;
  }
  alert("入力が大きすぎます。");
}

このプログラムでは、Math.fround を使用して値を32ビット単精度浮動小数点数に丸めています。ユーザーが入力した値が NaNInfinity の場合、適切に処理されます。

32ビット単精度浮動小数点数と64ビット倍精度浮動小数点数の比較

以下のプログラムは、Math.fround と通常の64ビット倍精度浮動小数点数の結果を比較します。

const f = p => {
  for (;;) {
    a = prompt(`${p}は何ですか?`);
    if (!isNaN(a))
      return a;
    alert(`${p}に、入力ミスがあります。 "${a}"`);
  }
}

for (;;) {
  const x = f("値");
  const fround = Math.fround(x);
  const normal = x;
  if (!isNaN(fround) && !isNaN(normal)) {
    alert(`${x} を32ビット単精度浮動小数点数に丸めると ${fround.toFixed(3)} です。\n通常の64ビット倍精度浮動小数点数では ${normal.toFixed(3)} です。`);
    break;
  }
  alert("入力が大きすぎます。");
}

このプログラムでは、Math.fround と通常の64ビット倍精度浮動小数点数の結果を比較しています。Math.fround は、32ビット単精度浮動小数点数に丸めるため、64ビット倍精度浮動小数点数よりも精度が低くなることがわかります。

注意点

  • 精度: Math.fround は、32ビット単精度浮動小数点数に丸めるため、64ビット倍精度浮動小数点数よりも精度が低くなります。
  • 戻り値の範囲: Math.fround の戻り値は、32ビット単精度浮動小数点数の範囲です。

脚註

  1. これは、IEEE 754単精度浮動小数点数の形式に従って丸められます。

外部リンク

カテゴリ:Book:JavaScript#Math/fround%20 カテゴリ:JavaScript
カテゴリ:Book:JavaScript カテゴリ:JavaScript カテゴリ:Pages using the JsonConfig extension