* Avoid M_NAN + M_NAN in complex functions [committed]
@ 2016-10-11 0:52 Joseph Myers
0 siblings, 0 replies; only message in thread
From: Joseph Myers @ 2016-10-11 0:52 UTC (permalink / raw)
To: libc-alpha
Some libm complex functions have code that computes M_NAN + M_NAN.
This is nonsensical; it's just equivalent to M_NAN, since it's a quiet
NaN (and the comments suggesting this raises an exception are
similarly wrong). This patch changes the code just to use M_NAN (and
removes the bogus comments). (Preferably, code should either
propagate an input NaN or do a computation that raises "invalid" and
generates a default NaN at the same time. There are various cases,
however, that currently raise "invalid" even for NaN inputs; I think
those are cases where "invalid" is optional in ISO C so a change to
whether it's raised would be OK, but they would still need more
careful consideration than the cases where such issues do not arise.)
Tested for x86_64 and x86 (testsuite, and that installed stripped
shared libraries are unchanged by the patch). Committed.
2016-10-11 Joseph Myers <joseph@codesourcery.com>
* math/s_ccosh_template.c (M_DECL_FUNC (__ccosh)): Use M_NAN
instead of M_NAN + M_NAN.
* math/s_csinh_template.c (M_DECL_FUNC (__csinh)): Likewise.
diff --git a/math/s_ccosh_template.c b/math/s_ccosh_template.c
index 68de41d..7fea5c9 100644
--- a/math/s_ccosh_template.c
+++ b/math/s_ccosh_template.c
@@ -88,7 +88,7 @@ M_DECL_FUNC (__ccosh) (CFLOAT x)
else
{
__imag__ retval = __real__ x == 0 ? 0 : M_NAN;
- __real__ retval = M_NAN + M_NAN;
+ __real__ retval = M_NAN;
if (icls == FP_INFINITE)
feraiseexcept (FE_INVALID);
@@ -124,9 +124,8 @@ M_DECL_FUNC (__ccosh) (CFLOAT x)
}
else
{
- /* The addition raises the invalid exception. */
__real__ retval = M_HUGE_VAL;
- __imag__ retval = M_NAN + M_NAN;
+ __imag__ retval = M_NAN;
if (icls == FP_INFINITE)
feraiseexcept (FE_INVALID);
diff --git a/math/s_csinh_template.c b/math/s_csinh_template.c
index 22c0c31..45fbb36 100644
--- a/math/s_csinh_template.c
+++ b/math/s_csinh_template.c
@@ -97,7 +97,7 @@ M_DECL_FUNC (__csinh) (CFLOAT x)
{
/* Real part is 0.0. */
__real__ retval = M_COPYSIGN (0, negate ? -1 : 1);
- __imag__ retval = M_NAN + M_NAN;
+ __imag__ retval = M_NAN;
if (icls == FP_INFINITE)
feraiseexcept (FE_INVALID);
@@ -143,9 +143,8 @@ M_DECL_FUNC (__csinh) (CFLOAT x)
}
else
{
- /* The addition raises the invalid exception. */
__real__ retval = M_HUGE_VAL;
- __imag__ retval = M_NAN + M_NAN;
+ __imag__ retval = M_NAN;
if (icls == FP_INFINITE)
feraiseexcept (FE_INVALID);
--
Joseph S. Myers
joseph@codesourcery.com
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2016-10-11 0:52 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-10-11 0:52 Avoid M_NAN + M_NAN in complex functions [committed] Joseph Myers
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).