`hypot`

,

`hypotf`

,

`hypotl`

,

`cabs`

,

`cabsf`

,

`cabsl`

—

Euclidean distance and complex absolute value
functions

```
#include
<math.h>
```

`double`
`hypot`

(

`double
x`,

`double
y`);

`float`
`hypotf`

(

`float
x`,

`float
y`);

`long double`
`hypotl`

(

`long
double x`,

`long
double y`);

```
#include
<complex.h>
```

`double`
`cabs`

(

`double
complex z`);

`float`
`cabsf`

(

`float
complex z`);

`long double`
`cabsl`

(

`long
double complex z`);

The

`hypot`

(),

`hypotf`

() and

`hypotl`

() functions compute the
sqrt(x*x+y*y) in such a way that underflow will not happen, and overflow
occurs only if the final result deserves it.

`hypot`

(

`infinity`,

`v`) =

`hypot`

(

`v`,

`infinity`) = +infinity for all

`v`, including NaN.

The

`cabs`

(),

`cabsf`

() and

`cabsl`

() functions return the absolute value
of the complex number

`z`.

Below 0.97

*ulps*. Consequently

`hypot`

(

`5.0`,

`12.0`) = 13.0 exactly; in general, hypot and
cabs return an integer whenever an integer might be expected.

As might be expected,

`hypot`

(

`v`,

`NaN`) and

`hypot`

(

`NaN`,

`v`) are NaN for all

*finite* `v`; with
"reserved operand" in place of "NaN", the same is true on
a VAX. But programmers on machines other than a VAX (it has no infinity) might
be surprised at first to discover that

`hypot`

(

`±infinity`,

`NaN`) = +infinity. This is intentional; it
happens because

`hypot`

(

`infinity`,

`v`) = +infinity for

*all* `v`, finite or
infinite. Hence

`hypot`

(

`infinity`,

`v`) is independent of

`v`. Unlike the reserved operand fault on a
VAX, the IEEE NaN is designed to disappear when it turns out to be irrelevant,
as it does in

`hypot`

(

`infinity`,

`NaN`).

sqrt(3)
A

`hypot`

() function first appeared in

Version 3 AT&T UNIX, and

`cabs`

() in

Version 7
AT&T UNIX.