HYPOT(3)

名称
hypot, hypotf, cabs, cabsf

ライブラリ
libm - ユークリッド距離と複素絶対値関数

書式
<math.h> double hypot(double x, double y) float hypotf(float x, float y) struct {double x, y;} z; double cabs(z) struct {float x, y;} z; float cabsf(z)

解説
hypot(), hypotf(), cabs(), および cabsf() 関数は、アンダフローが 起きず、最終結果でオーバフローが起こる場合のみオーバフローする方法で sqrt(x*x+y*y) を計算します。

hypot(, v) あるいは hypot(v, ) は、全ての v に対して、 を含む + になります。

誤差 ( Roundoff 等に基づく )
0.97 ulps 以下。 その結果、 完全な hypot(5.0, 12.0) = 13.0 となる。通常、hypot と cabs は整数値が求められる時には必ず整数を返します。

cabs.c の注釈にある短縮、かつ高速版の hypot と cabs については例外となり、 誤差は 1.2 ulps を超すことがあります。

注
想定通り、 hypot(v, ) と hypot(, v) は 全有限数 v に対して となります。 "reserved operand" が "" に置き換われば、 VAX でも同じ結果になります。 VAX 以外のマシン ( もし無限数が無ければ ) のプログラマは hypot(±, ) = + に初めは驚くかもしれません。 これは意図的なものであり、無限、有限に関係なく、 すべての v について hypot(, v) = + であるために起こります。 したがって、 hypot(, v) は、 v とは独立した値です。 VAX での予約オペランドフォルトとは異なり、 IEEE は hypot(, ) において同様に、無関係になると 消失します。

関連項目
math(3), sqrt(3)

歴史
hypot() 関数と cabs() 関数はどちらも AT&T UNIX から登場しました。