# FreeBSD Manual Pages

```HYPOT(3)		 BSD Library Functions Manual		      HYPOT(3)

NAME
hypot, hypotf, cabs, cabsf	-- Euclidean distance and complex absolute
value functions

LIBRARY
Math Library (libm, -lm)

SYNOPSIS
#include <math.h>

double
hypot(double x, double y);

float
hypotf(float x, float y);

struct {double x, y;} z;

double
cabs(z);

struct {float x, y;} z;

float
cabsf(z);

DESCRIPTION
The hypot(), hypotf(), cabs() and cabsf() 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.

ERROR (due to Roundoff,	etc.)
Below 0.97	ulps.  Consequently hypot(5.0, 12.0) = 13.0 exactly; in	gen-
eral, hypot and cabs return an integer whenever an	integer	might be ex-
pected.

The same cannot be	said for the shorter and faster	version	of hypot and
cabs that is provided in the comments in cabs.c; its error	can exceed 1.2
ulps.

NOTES
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 (if 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 in-
dependent 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).