JavaScript/Math/hypot

Math.hypot(...args) は、引数として与えられた数値の二乗和の平方根を返します。これは、ユークリッド距離(ピタゴラスの定理)を計算するために使用されます。複数の引数を取ることができ、各引数の二乗和の平方根を計算します[1]

  • 引数が1つだけの場合、Math.abs(x) と等価です。
  • 引数が2つの場合、直角三角形の斜辺の長さを計算するために使用できます。
  • 引数が3つ以上の場合、多次元空間での距離を計算するために使用できます。

引数の扱い

  • 引数が NaN の場合、結果は NaN になります。
  • 引数が +0 または -0 の場合、それらの値は二乗和の計算に影響を与えません。
  • 引数が Infinity または -Infinity の場合、結果は Infinity になります。
  • 引数が与えられない場合、結果は +0 になります。

直角三角形の斜辺の長さを求めるプログラム

以下のプログラムは、Math.hypot を使用して直角三角形の斜辺の長さを計算します。

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

for (;;) {
  const a = f("縦の辺の長さ");
  const b = f("横の辺の長さ");
  const hypot = Math.hypot(a, b);
  if (hypot !== Infinity) {
    alert(`縦の辺の長さ${a}cm、横の辺の長さ${b}cmならば、\n斜辺の長さは${hypot.toFixed(3)}cmです。`);
    break;
  }
  alert("入力が大きすぎます。");
}

このプログラムでは、Math.hypot を使用して斜辺の長さを計算しています。Math.hypot は、自乗和の平方根を直接計算するため、オーバーフローやアンダーフローのリスクがありません。

多次元空間での距離を計算するプログラム

以下のプログラムは、3次元空間での2点間の距離を計算します。

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

for (;;) {
  const x1 = f("点1のx座標");
  const y1 = f("点1のy座標");
  const z1 = f("点1のz座標");
  const x2 = f("点2のx座標");
  const y2 = f("点2のy座標");
  const z2 = f("点2のz座標");

  const dx = x2 - x1;
  const dy = y2 - y1;
  const dz = z2 - z1;

  const distance = Math.hypot(dx, dy, dz);
  if (distance !== Infinity) {
    alert(`点1 (${x1}, ${y1}, ${z1}) と 点2 (${x2}, ${y2}, ${z2}) の距離は ${distance.toFixed(3)}cmです。`);
    break;
  }
  alert("入力が大きすぎます。");
}

このプログラムでは、Math.hypot を使用して3次元空間での距離を計算しています。Math.hypot は、任意の次元の距離計算に使用できます。

脚註

  1. これは、数学的には Math.sqrt(args[0]**2 + args[1]**2 + ... + args[n]**2) と等しいのですが、Math.hypot はオーバーフローやアンダーフローを防ぐために、より高い精度の内部表現を使用します。

外部リンク

カテゴリ:JavaScript
カテゴリ:JavaScript