首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

std::hypot

Defined in header <cmath>

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计算xy,在计算的中间阶段不存在不适当的溢出或下溢。

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...

此函数的两个参数版本所计算的值是带有长度边的直角三角形的低音长度。xy,或点的距离(x,y)从源头(0,0),或复数的大小。x+iy...

此函数的三个参数版本计算的值是点的距离。(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)...

二次

代码语言:javascript
复制
#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";
}

二次

产出:

二次

代码语言:javascript
复制
(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关于低端的文件

代码语言:txt
复制
 © cppreference.com

在CreativeCommonsAttribution下授权-ShareAlike未移植许可v3.0。

扫码关注腾讯云开发者

领取腾讯云代金券