std::hypot, std::hypotf, std::hypotl
| ヘッダー <cmath> で定義 |
||
| (1) | ||
float hypot ( float x, float y ); double hypot ( double x, double y ); |
(C++11以降) (C++23まで) |
|
| /*浮動小数点数型*/ hypot ( /*浮動小数点型*/ x, |
(C++23から) (C++26 以降 constexpr) |
|
float hypotf( float x, float y ); |
(2) | (C++11以降) (C++26 以降 constexpr) |
long double hypotl( long double x, long double y ); |
(3) | (C++11以降) (C++26 以降 constexpr) |
| (4) | ||
float hypot ( float x, float y, float z ); double hypot ( double x, double y, double z ); |
(C++17以降) (C++23まで) |
|
| /*浮動小数点数型*/ hypot ( /*浮動小数点型*/ x, |
(C++23から) (C++26 以降 constexpr) |
|
| ヘッダー <cmath> で定義 |
||
template< class Arithmetic1, Arithmetic2 > /*共通浮動小数点型*/ |
(A) | (C++11以降) (C++26 以降 constexpr) |
| template< class Arithmetic1, Arithmetic2, Arithmetic3 > /*共通浮動小数点型*/ |
(B) | (C++17以降) |
std::hypot のオーバーロードを提供します。(since C++23)std::hypot のオーバーロードを提供します。(since C++23)この関数の2引数バージョンによって計算される値は、長さ x および y の辺を持つ直角三角形の斜辺の長さ、または原点 (0,0) からの点 (x,y) までの距離、または複素数 x+iy の大きさです。
この関数の3引数バージョンによって計算される値は、原点 (0,0,0) からの点 (x,y,z) までの距離です。
目次 |
[編集] Parameters
| x, y, z | - | 浮動小数点または整数値 |
[編集] Return value
+y2
が返されます。
+y2
+z2
が返されます。
オーバーフローによる範囲エラーが発生した場合、+HUGE_VAL、+HUGE_VALF、または +HUGE_VALL が返されます。
アンダーフローによる範囲エラーが発生した場合、正しい結果(丸め後)が返されます。
[編集] Error handling
エラーは 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 が返されます。
[編集] Notes
実装は通常、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、2番目の引数 num2、およびオプションの3番目の引数 num3 が
|
(C++23まで) |
|
ここで、/*共通浮動小数点型*/ は、num1、num2、および num3 の型の中で、最も高い 浮動小数点変換ランク と最も高い 浮動小数点変換サブランク を持つ浮動小数点型です。整数型の引数は、double と同じ浮動小数点変換ランクを持つと見なされます。 そのような最高のランクとサブランクセを持つ浮動小数点型が存在しない場合、オーバーロード解決は提供されたオーバーロードから使用可能な候補を導出しません。 |
(C++23から) |
| 機能テストマクロ | 値 | 規格 | 機能 |
|---|---|---|---|
__cpp_lib_hypot |
201603L |
(C++17) | std::hypot の3引数オーバーロード (4,B) |
[編集] Example
#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() { // typical usage 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 has 3-argument hypot overload: std::cout << "distance(a,b) = " << std::hypot(a.x - b.x, a.y - b.y, a.z - b.z) << '\n'; // special values std::cout << "hypot(NAN,INFINITY) = " << std::hypot(NAN, INFINITY) << '\n'; // error handling 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[編集] See also
| (C++11)(C++11) |
数値を指定されたべき乗に累乗する (xy) (関数) |
| (C++11)(C++11) |
平方根を計算する (√x) (関数) |
| (C++11)(C++11)(C++11) |
立方根を計算する (3√x) (関数) |
| 複素数の大きさを返す (関数テンプレート) | |
| C ドキュメント (hypot)
| |