J3/05-118r2
Date: 9-Feb-2005
To: J3
From: Interp/Stan Whitlock
Subject: HYPOT(NaN,inf), HYPOT(NaN,finite)
NUMBER: F03/0039
TITLE: HYPOT()
KEYWORDS: IEEE-754, hypot()
DEFECT TYPE: Erratum
STATUS: For consideration
QUESTION:
What is HYPOT(NaN,infinity)? HYPOT(NaN,finite)?
HYPOT(X,Y) when X and/or Y is an infinity (even if the other is
a NaN) shall be +infinity. Reason: hypot(), when one of the
arguments is an infinity, is +infinity independent of the
value of the other argument. So, if the NaN argument is
replaced by zero, any finite number, or any infinity,
hypot(infinity,NaN) is still infinity.
HYPOT(X,Y) when X and/or Y is a NaN (and neither is infinite)
shall be a NaN, and should one of the NaN arguments.
ANSWER:
This example illustrates the use of the features of this section to
provide reliable software that is fast in the uncomplicated case.
We did not consider what would happen if one of the arguments is a
NaN and have therefore edited the text slightly.
DISCUSSION:
In fact, if either X or Y is a NaN, the first executable statement
will set HYPOT to a NaN without signaling an exception. The slower
code in the IF construct will therefore not be executed and a NaN
will be returned, which is consistent with the way NaNs are handled
by intrinsic operators, see paragraph 3 of section 6.2 of the
IEEE International Standard.
EDITS:
Page and line numbers refer to 04-007.
[389:12]. Subclause 14.11, Note 14.17, final paragraph, line 2.
Before "exception" add "overflow or underflow".
[389:16+]. Subclause 14.11, Note 14.17, at the end of the final
paragraph, add "This HYPOT function does not handle infinte arguments
in the same way that the hypot function in the 1999 C standard."
SUBMITTED BY: Fred Tydeman
HISTORY: J3/05-118 m171 Submitted