std::hypot
性病:低度
Defined in header | | |
---|---|---|
float hypot( float x, float y | (1) | (since C++11) |
double hypot( double x, double y | (2) | (since C++11) |
long double hypot( long double x, long double y | (3) | (since C++11) |
Promoted hypot( Arithmetic1 x, Arithmetic2 y | (4) | (since C++11) |
float hypot( float x, float y, float z | (5) | (since C++17) |
double hypot( double x, double y, double z | (6) | (since C++17) |
long double hypot( long double x, long double y, long double z | (7) | (since C++17) |
Promoted hypot( Arithmetic1 x, Arithmetic2 y, Arithmetic3 z | (8) | (since C++17) |
1-3%29计算x
和y
,在计算的中间阶段不存在不适当的溢出或下溢。
4%29一组重载或函数模板,用于%281-3%29中未涵盖的所有算术类型参数组合。如果有任何争论积分型,它被铸造成double
.如果任何其他论点是long double
,则返回类型为long double
,否则就是double
...
5-7%29计算x
,,,y
,和z
,在计算的中间阶段不存在不适当的溢出或下溢。
8%29一组重载或函数模板,用于%285-7%29中未涵盖的所有算术类型参数组合。如果有任何争论积分型,它被铸造成double
.如果任何其他论点是long double
,则返回类型为long double
,否则就是double
...
此函数的两个参数版本所计算的值是带有长度边的直角三角形的低音长度。x
和y
,或点的距离(x,y)
从源头(0,0)
,或复数的大小。x+
i
y
...
此函数的三个参数版本计算的值是点的距离。(x,y,z)
从源头(0,0,0)
...
参数
x, y, z | - | values of floating-point or integral types |
---|
返回值
1-4%29如果没有错误发生,则直角三角形的低音,X2。
+y2
,被归还。
5-8%29如果没有错误发生,则距离原点在3D空间中的位置有很大的差距。
+y2
+Z2
,被归还。
如果溢出导致范围错误,+HUGE_VAL
,,,+HUGE_VALF
,或+HUGE_VALL
会被归还。
如果由于下流发生范围错误,则返回舍入%29后的正确结果%28。
错误处理
错误按math_errhandling
...
如果实现支持ieee浮点算法%28IEC 60559%29,
hypot(x, y)
,,,hypot(y, x)
,和hypot(x, -y)
是等价的
- 如果其中一个论点是±0,
hypot(x,y)
等于fabs
使用非零参数调用。
- 如果其中一个参数是±∞,
hypot(x,y)
返回+∞,即使另一个参数是NaN
- 否则,如果其中任何参数为nan,则返回nan。
注记
在最后一个位置%29中,实现通常保证小于1 ULP%28单位的精度:GNU,,,BSD,,,Open64...
std::hypot(x, y)等于std::abs(std::complex<double>(x,y))...
POSIX指定只有当这两个参数都低于正常,并且正确的结果也低于正常的%28时,才可能发生这种下流,这就禁止了简单的实现%29。
两点间距离(x1,y1,z1)
和(x2,y2,z2)
在三维空间上可以计算为std::hypot(x2-x1, y2-y1, z2-z1)
...
例
二次
#include <iostream>
#include <cmath>
#include <cerrno>
#include <cfenv>
#include <cfloat>
#include <cstring>
#pragma STDC FENV_ACCESS ON
int main()
{
// typical usage
std::cout << "(1,1) cartesian is (" << std::hypot(1,1)
<< ',' << std::atan2(1,1) << ") polar\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(fetestexcept(FE_OVERFLOW))
std::cout << " FE_OVERFLOW raised\n";
}
二次
产出:
二次
(1,1) cartesian is (1.41421,0.785398) polar
hypot(NAN,INFINITY) = inf
hypot(DBL_MAX,DBL_MAX) = inf
errno = ERANGE Numerical result out of range
FE_OVERFLOW raised
二次
另见
pow | raises a number to the given power (xy) (function) |
---|---|
sqrt | computes square root (√x) (function) |
cbrt (C++11) | computes cubic root (3√x) (function) |
abs(std::complex) | returns the magnitude of a complex number (function template) |
c关于低端的文件
© cppreference.com
在CreativeCommonsAttribution下授权-ShareAlike未移植许可v3.0。