std:: hypot, std:: hypotf, std:: hypotl
|
ヘッダー
<cmath>
で定義
|
||
| (1) | ||
|
float
hypot
(
float
x,
float
y
)
;
double
hypot
(
double
x,
double
y
)
;
|
(C++11以降)
(C++23以前) |
|
|
/*floating-point-type*/
hypot
(
/*floating-point-type*/
x,
|
(C++23以降)
(constexpr C++26以降) |
|
|
float
hypotf
(
float
x,
float
y
)
;
|
(2) |
(C++11以降)
(constexpr C++26以降) |
|
long
double
hypotl
(
long
double
x,
long
double
y
)
;
|
(3) |
(C++11以降)
(constexpr C++26以降) |
| (4) | ||
|
float
hypot
(
float
x,
float
y,
float
z
)
;
double
hypot
(
double
x,
double
y,
double
z
)
;
|
(C++17以降)
(C++23以前) |
|
|
/*floating-point-type*/
hypot
(
/*floating-point-type*/
x,
|
(C++23以降)
(constexpr C++26以降) |
|
|
ヘッダー
<cmath>
で定義
|
||
|
template
<
class
Arithmetic1, Arithmetic2
>
/*common-floating-point-type*/
|
(A) |
(C++11以降)
(constexpr C++26以降) |
|
template
<
class
Arithmetic1, Arithmetic2, Arithmetic3
>
/*common-floating-point-type*/
|
(B) | (C++17以降) |
std::hypot
のオーバーロードを、パラメータ
x
と
y
の型としてすべてのcv修飾されない浮動小数点型に対して提供する。
(C++23以降)
std::hypot
のオーバーロードを提供する。
(C++23以降)
この関数の2引数バージョンで計算される値は、長さ
x
と
y
の辺を持つ直角三角形の斜辺の長さ、あるいは点
(x,y)
から原点
(0,0)
までの距離、または複素数
x+
i
y
の絶対値である。
この関数の3引数バージョンで計算される値は、点
(x,y,z)
から原点
(0,0,0)
までの距離です。
目次 |
パラメータ
| x, y, z | - | 浮動小数点または整数値 |
戻り値
+y 2
が返されます。
+y 2
+z 2
が返されます。
オーバーフローによる範囲エラーが発生した場合、
+HUGE_VAL
、
+HUGE_VALF
または
+HUGE_VALL
が返されます。
アンダーフローによる範囲エラーが発生した場合、正しい結果(丸め後)が返されます。
エラーハンドリング
エラーは math_errhandling で指定された通りに報告されます。
IEEE浮動小数点演算(IEC 60559)を実装がサポートしている場合、
- std :: hypot ( x, y ) 、 std :: hypot ( y, x ) および std :: hypot ( x, - y ) は等価です。
- 引数のいずれかが ±0 の場合、 std :: hypot ( x, y ) は非ゼロ引数で呼び出された std::fabs と等価です。
- 引数のいずれかが ±∞ の場合、 std :: hypot ( x, y ) は他方の引数が NaN であっても +∞ を返します。
- それ以外の場合、いずれかの引数が NaN であれば NaN が返されます。
注記
実装は通常、1 ulp (Unit in the Last Place — 最小精度単位) 未満の精度を保証します: GNU , BSD .
std :: hypot ( x, y ) は std :: abs ( std:: complex < double > ( x, y ) ) と等価です。
POSIXは アンダーフローが発生するのは、両方の引数が非正規化数であり、かつ正しい結果も非正規化数である場合のみであると規定しています(これは単純な実装を禁止するものです)。
|
3次元空間における2点
|
(C++17以降) |
追加のオーバーロードは必ずしも (A,B) の形式で提供される必要はありません。それらは、第一引数 num1 、第二引数 num2 、およびオプションの第三引数 num3 に対して以下を保証するのに十分であればよいのです:
|
(C++23まで) |
|
num1 、 num2 および num3 が算術型を持つ場合、
ここで /*common-floating-point-type*/ は、 num1 、 num2 および num3 の型の中で最も高い 浮動小数点変換ランク と最も高い 浮動小数点変換サブランク を持つ浮動小数点型であり、整数型の引数は double と同じ浮動小数点変換ランクを持つものと見なされる。 最も高いランクとサブランクを持つ浮動小数点型が存在しない場合、 オーバーロード解決 は提供されたオーバーロードから使用可能な候補を結果として得ない。 |
(C++23以降) |
| 機能テスト マクロ | 値 | 標準 | 機能 |
|---|---|---|---|
__cpp_lib_hypot
|
201603L
|
(C++17) |
std::hypotの
3引数オーバーロード
(4,B)
|
例
#include <cerrno> #include <cfenv> #include <cfloat> #include <cmath> #include <cstring> #include <iostream> // #pragma STDC FENV_ACCESS ON struct Point3D { float x, y, z; }; int main() { // 典型的な使用例 std::cout << "(1,1) cartesian is (" << std::hypot(1, 1) << ',' << std::atan2(1,1) << ") polar\n"; Point3D a{3.14, 2.71, 9.87}, b{1.14, 5.71, 3.87}; // C++17 には3引数の hypot オーバーロードがあります: std::cout << "distance(a,b) = " << std::hypot(a.x - b.x, a.y - b.y, a.z - b.z) << '\n'; // 特殊な値 std::cout << "hypot(NAN,INFINITY) = " << std::hypot(NAN, INFINITY) << '\n'; // エラー処理 errno = 0; std::feclearexcept(FE_ALL_EXCEPT); std::cout << "hypot(DBL_MAX,DBL_MAX) = " << std::hypot(DBL_MAX, DBL_MAX) << '\n'; if (errno == ERANGE) std::cout << " errno = ERANGE " << std::strerror(errno) << '\n'; if (std::fetestexcept(FE_OVERFLOW)) std::cout << " FE_OVERFLOW raised\n"; }
出力:
(1,1) cartesian is (1.41421,0.785398) polar
distance(a,b) = 7
hypot(NAN,INFINITY) = inf
hypot(DBL_MAX,DBL_MAX) = inf
errno = ERANGE Numerical result out of range
FE_OVERFLOW raised
関連項目
|
(C++11)
(C++11)
|
数値を指定された累乗に引き上げる (
x
y
)
(関数) |
|
(C++11)
(C++11)
|
平方根を計算する (
√
x
)
(関数) |
|
(C++11)
(C++11)
(C++11)
|
立方根を計算する (
3
√
x
)
(関数) |
|
複素数の絶対値を返す
(関数テンプレート) |
|
|
C documentation
for
hypot
|
|