[PATCH] fix sinf(NAN)

sinf(NAN) should not signal invalid fp exception
so use isless instead of < where NAN is compared.

this makes the sinf tests pass on aarch64.

	* sysdeps/ieee754/flt-32/s_sinf.c (sinf): Use isless.
This commit is contained in:
Szabolcs Nagy 2017-12-05 18:09:22 +00:00
parent 1f70eae4cf
commit 00d54af7c8
2 changed files with 7 additions and 3 deletions

View File

@ -1,3 +1,7 @@
2017-12-05 Szabolcs Nagy <szabolcs.nagy@arm.com>
* sysdeps/ieee754/flt-32/s_sinf.c (sinf): Use isless.
2017-12-05 Joseph Myers <joseph@codesourcery.com> 2017-12-05 Joseph Myers <joseph@codesourcery.com>
* stdlib/strfromd.c: Include <bits/floatn.h>. * stdlib/strfromd.c: Include <bits/floatn.h>.

View File

@ -128,7 +128,7 @@ SINF_FUNC (float x)
double theta = x; double theta = x;
double abstheta = fabs (theta); double abstheta = fabs (theta);
/* If |x|< Pi/4. */ /* If |x|< Pi/4. */
if (abstheta < M_PI_4) if (isless (abstheta, M_PI_4))
{ {
if (abstheta >= 0x1p-5) /* |x| >= 2^-5. */ if (abstheta >= 0x1p-5) /* |x| >= 2^-5. */
{ {
@ -162,8 +162,8 @@ SINF_FUNC (float x)
} }
else /* |x| >= Pi/4. */ else /* |x| >= Pi/4. */
{ {
unsigned int signbit = (x < 0); unsigned int signbit = isless (x, 0);
if (abstheta < 9 * M_PI_4) /* |x| < 9*Pi/4. */ if (isless (abstheta, 9 * M_PI_4)) /* |x| < 9*Pi/4. */
{ {
/* There are cases where FE_UPWARD rounding mode can /* There are cases where FE_UPWARD rounding mode can
produce a result of abstheta * inv_PI_4 == 9, produce a result of abstheta * inv_PI_4 == 9,