JavaScript/Math/sqrt
表示
< JavaScript | Math
Math.sqrt(x)は引数xの平方根を返します[1]。
- 引数xが負の値の場合、NaNを返します。
- 引数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
という関係が成り立っています。これを三平方の定理またはピタゴラスの定理といいます。
脚註
[編集]- ^ これは、数学的には x ** 0.5 と等しいのですが、浮動小数点演算として考えると x ** 0.5 は精度を担保できません。
- ^ sqrt(-0)は+0を返しそうですが、直感に反して -0 を返します。