Fix errno for boundary conditions in 128-bit long double.

Similar to the changes which went already in for the other formats,
follow POSIX rules for errno.
This commit is contained in:
Ulrich Drepper 2009-05-29 12:00:22 -07:00
parent b8bb339f7d
commit 7f3394bdf3
5 changed files with 43 additions and 4 deletions

View File

@ -1,3 +1,14 @@
2009-05-29 Jakub Jelinek <jakub@redhat.com>
* sysdeps/ieee754/ldbl-128/s_expm1l.c: Include <errno.h>.
(__expm1l): Set errno to ERANGE on overflow.
* sysdeps/ieee754/ldbl-128/s_tanl.c: Include <errno.h>.
(__tanl): Set errno to EDOM for ±Inf.
* sysdeps/ieee754/ldbl-128/s_cosl.c: Include <errno.h>.
(__cosl): Set errno to EDOM for ±Inf.
* sysdeps/ieee754/ldbl-128/s_sinl.c: Include <errno.h>.
(__sinl): Set errno to EDOM for ±Inf.
2009-05-29 Jakub Jelinek <jakub@redhat.com> 2009-05-29 Jakub Jelinek <jakub@redhat.com>
* sysdeps/s390/s390-32/__longjmp.c (__longjmp): If CHECK_SP is * sysdeps/s390/s390-32/__longjmp.c (__longjmp): If CHECK_SP is

View File

@ -44,6 +44,7 @@
* TRIG(x) returns trig(x) nearly rounded * TRIG(x) returns trig(x) nearly rounded
*/ */
#include <errno.h>
#include "math.h" #include "math.h"
#include "math_private.h" #include "math_private.h"
@ -66,7 +67,14 @@
return __kernel_cosl(x,z); return __kernel_cosl(x,z);
/* cos(Inf or NaN) is NaN */ /* cos(Inf or NaN) is NaN */
else if (ix>=0x7fff000000000000LL) return x-x; else if (ix>=0x7fff000000000000LL) {
if (ix == 0x7fff000000000000LL) {
GET_LDOUBLE_LSW64(n,x);
if (n == 0)
__set_errno (EDOM);
}
return x-x;
}
/* argument reduction needed */ /* argument reduction needed */
else { else {

View File

@ -53,6 +53,7 @@
#include <errno.h>
#include "math.h" #include "math.h"
#include "math_private.h" #include "math_private.h"
@ -121,7 +122,10 @@ __expm1l (long double x)
/* Overflow. */ /* Overflow. */
if (x > maxlog) if (x > maxlog)
return (big * big); {
__set_errno (ERANGE);
return (big * big);
}
/* Minimum value. */ /* Minimum value. */
if (x < minarg) if (x < minarg)

View File

@ -44,6 +44,7 @@
* TRIG(x) returns trig(x) nearly rounded * TRIG(x) returns trig(x) nearly rounded
*/ */
#include <errno.h>
#include "math.h" #include "math.h"
#include "math_private.h" #include "math_private.h"
@ -66,7 +67,14 @@
return __kernel_sinl(x,z,0); return __kernel_sinl(x,z,0);
/* sin(Inf or NaN) is NaN */ /* sin(Inf or NaN) is NaN */
else if (ix>=0x7fff000000000000LL) return x-x; else if (ix>=0x7fff000000000000LL) {
if (ix == 0x7fff000000000000LL) {
GET_LDOUBLE_LSW64(n,x);
if (n == 0)
__set_errno (EDOM);
}
return x-x;
}
/* argument reduction needed */ /* argument reduction needed */
else { else {

View File

@ -44,6 +44,7 @@
* TRIG(x) returns trig(x) nearly rounded * TRIG(x) returns trig(x) nearly rounded
*/ */
#include <errno.h>
#include "math.h" #include "math.h"
#include "math_private.h" #include "math_private.h"
@ -65,7 +66,14 @@
if(ix <= 0x3ffe921fb54442d1LL) return __kernel_tanl(x,z,1); if(ix <= 0x3ffe921fb54442d1LL) return __kernel_tanl(x,z,1);
/* tanl(Inf or NaN) is NaN */ /* tanl(Inf or NaN) is NaN */
else if (ix>=0x7fff000000000000LL) return x-x; /* NaN */ else if (ix>=0x7fff000000000000LL) {
if (ix == 0x7fff000000000000LL) {
GET_LDOUBLE_LSW64(n,x);
if (n == 0)
__set_errno (EDOM);
}
return x-x; /* NaN */
}
/* argument reduction needed */ /* argument reduction needed */
else { else {