ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

hypot

構文

c = hypot(a,b)

説明

c = hypot(a,b) はアンダーフローとオーバーフローを回避するように計算された、以下の方程式の要素単位の結果を返します。

c = sqrt(abs(a).^2 + abs(b).^2)

入力 a および b は、以下のルールに従わなければなりません。

  • ab の両方は、単精度、倍精度、または浮動小数点配列でなければなりません。

  • a および b 配列は、同じサイズであるか、または一方がスカラーでもう一方が非スカラーであるかのいずれかでなければなりません。後者の場合、hypot は、非スカラー入力のサイズと一致するように、スカラー入力を拡張します。

  • a または b は、空配列 (0 行 N 列または N 行 0 列) の場合、他方も同じサイズまたはスカラーでなければなりません。結果 c は、空の入力と同じサイズの空配列です。

関数 hypot は、入力のタイプによって、c 出力の戻り値は以下のように変わります。

  • 関数 hypot への入力が複素数 (w+xi および y+zi) の場合、ステートメント c = hypot(w+xi,y+zi) は、"正の実数"の結果を返します。

    c = sqrt(abs(w).^2+abs(x).^2+abs(y).^2+abs(z).^2)
  • a または b±Inf の場合、hypotInf を返します。

  • abInf ではないが、一方または両方の入力が NaN の場合、hypotNaN を返します。

  • すべての入力が有限値の場合、結果も有限値になります。ただし、両方の入力が MATLAB® 定数 realmax の値に非常に近い場合は例外です。これは、方程式 c = hypot(realmax,realmax) は理論的に sqrt(2)*realmax となり、Inf にオーバーフローされるためです。

例 1

関数 hypot を使用した場合と基本的な hypot 方程式を M コードでコーディングする場合の差を示すため、関数 hypot によるアンダーフローとオーバーフローを考慮せずに関数 hypot と同じ機能を実行する無名関数を作成します。

myhypot = @(a,b)sqrt(abs(a).^2+abs(b).^2);

コーディングした関数が有効な値を返す上限を検出します。このテストは、約 1e154 のときに最大に達し、その時点で無限値が返されることがわかります。

myhypot(1e153,1e153)
ans =
    1.4142e+153

myhypot(1e154,1e154)
ans =
   Inf

関数 hypot を使用して同じことを行うと、関数 hypot が最高値およそ 1e308 の値で機能することを確認できます。この値は、使用しているコンピューターの realmax の値 (特定のコンピューターで表現できる最大倍精度浮動小数点数) とほぼ同じです。

hypot(1e308,1e308)
ans =
  1.4142e+308

hypot(1e309,1e309)
ans =
   Inf

例 2

hypot(a,a) は、この例で示すように、理論的に sqrt(2)*abs(a) を返します。

x = 1.271161e308;

y = x * sqrt(2)
y =
  1.7977e+308

y = hypot(x,x)
y =
  1.7977e+308

参考

| |

この情報は役に立ちましたか?