*This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of New status.*

`std::hypot`

is underspecified compared to the 2-arg overload**Section:** 28.7.3 [c.math.hypot3] **Status:** New
**Submitter:** Matthias Kretz **Opened:** 2018-12-06 **Last modified:** 2018-12-21

**Priority: **3

**View all issues with** New status.

**Discussion:**

The 2-arg `hypot`

function specified in the C standard is required to avoid overflow and underflow
(7.12.7.3 p2). Furthermore C's Annex F (IEC 60559 floating-point arithmetic) defines special cases for
inputs of `±0`

and `±inf`

(F. 10.4.3). The 3-arg `hypot`

function
28.7.3 [c.math.hypot3] is only specified as "*Returns:*
$\sqrt{{x}^{2}+{y}^{2}+{z}^{2}}$.". This is
inconsistent with the 2-arg overload.

It is not clear whether C's Annex F is "imported" into the C++ standard. [cmath.syn] p1 suggests that it
is: "The contents and meaning of the header `<cmath>`

are the same as the C standard library
header `<math.h>`

, […]".

*[2018-12-21 Reflector prioritization]*

Set Priority to 3

**Proposed resolution:**

This wording is relative to N4778.

[

Drafting Note:Two mutually exclusive options are prepared, depicted below byOption AandOption B, respectively.]

**Option A**

Modify 28.7.3 [c.math.hypot3] as indicated:

float hypot(float x, float y, float z); double hypot(double x, double y, double z); long double hypot(long double x, long double y, long double z);

-?-

*Effects:*The`hypot`

functions compute the square root of the sum of the squares of`x`

,`y`

, and`z`

, without undue overflow or underflow. A range error may occur.-1-

*Returns:*$\sqrt{{x}^{2}+{y}^{2}+{z}^{2}}$.-?-

*Remarks:*If`__STDC_IEC_559__`

is defined, the following guarantees hold:`hypot(x, y, z)`

,`hypot(x, z, y)`

,`hypot(z, y, x)`

, and`hypot(x, y, -z)`

are equivalent.if

`y`

,^{2}+ z^{2}== ±0`hypot(x, y, z)`

is equivalent to`fabs(x)`

.`hypot(±∞, y, z)`

returns`+∞`

, even if`y`

and/or`z`

is a NaN.

**Option B**

Add a note that clarifies that the behavior of the 3-arg

`hypot`

function differs from the C specification. I.e. that no special guarantees wrt. over-/underflow or special values are given.