JavaScript/Math/sqrt

出典: フリー教科書『ウィキブックス(Wikibooks)』

Math.sqrt(x)は引数xの平方根を返します[1]

  1. 引数xが負の値の場合、NaNを返します。
  2. 引数xがNaN,+0,-0[2]あるいはInfinityの場合、引数xを返します。

[編集]

直角三角形の斜辺の長さを求めるプログラム
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 sqrt = Math.sqrt(a ** 2 + b ** 2)
  if (sqrt !== Infinity) {
    alert(`縦の辺の長さ${a}cm、横の辺の長さ${b}cmならば、\n斜辺の長さは${sqrt.toFixed(3)}cmです。`);
    break;
  }
  alert("入力が大きすぎます。");
}
このプログラムでは Math.sqrt の説明のため sqrt = Math.sqrt(a ** 2 + b ** 2) で斜辺の長さを求めていますが、自乗を行うとオーバーフローあるいはアンダーフローの恐れがあるので、本来は斜辺を求めるのならば、自乗和の平方根を返すメソッド Math.hypot を使うべきです。
Math.hypot は、より高い精度の内部表現を使いオーバーフローやアンダーフローの心配はありません。
解説

(斜辺の長さ)2 = (縦の辺の長さ)2 + (横の辺の長さ)2という関係が成り立っています。これを三平方の定理またはピタゴラスの定理といいます。


脚註[編集]

  1. ^ これは、数学的には x ** 0.5 と等しいのですが、浮動小数点演算として考えると x ** 0.5 は精度を担保できません。
  2. ^ sqrt(-0)は+0を返しそうですが、直感に反して -0 を返します。

外部リンク[編集]