math: minor cleanups in ceil and floor
This commit is contained in:
parent
d79ac8c38f
commit
7eabe8e690
5 changed files with 7 additions and 10 deletions
|
|
@ -34,7 +34,6 @@ double ceil(double x)
|
||||||
if (j0 < 0) {
|
if (j0 < 0) {
|
||||||
/* raise inexact if x != 0 */
|
/* raise inexact if x != 0 */
|
||||||
if (huge+x > 0.0) {
|
if (huge+x > 0.0) {
|
||||||
/* return 0*sign(x) if |x|<1 */
|
|
||||||
if (i0 < 0) {
|
if (i0 < 0) {
|
||||||
i0 = 0x80000000;
|
i0 = 0x80000000;
|
||||||
i1=0;
|
i1=0;
|
||||||
|
|
@ -44,7 +43,7 @@ double ceil(double x)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
i = (0x000fffff)>>j0;
|
i = 0x000fffff>>j0;
|
||||||
if (((i0&i)|i1) == 0) /* x is integral */
|
if (((i0&i)|i1) == 0) /* x is integral */
|
||||||
return x;
|
return x;
|
||||||
/* raise inexact flag */
|
/* raise inexact flag */
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,6 @@ float ceilf(float x)
|
||||||
if (j0 < 0) {
|
if (j0 < 0) {
|
||||||
/* raise inexact if x != 0 */
|
/* raise inexact if x != 0 */
|
||||||
if (huge+x > 0.0f) {
|
if (huge+x > 0.0f) {
|
||||||
/* return 0*sign(x) if |x|<1 */
|
|
||||||
if (i0 < 0)
|
if (i0 < 0)
|
||||||
i0 = 0x80000000;
|
i0 = 0x80000000;
|
||||||
else if(i0 != 0)
|
else if(i0 != 0)
|
||||||
|
|
|
||||||
|
|
@ -49,8 +49,7 @@ long double ceill(long double x)
|
||||||
|
|
||||||
static const long double huge = 1.0e300;
|
static const long double huge = 1.0e300;
|
||||||
|
|
||||||
long double
|
long double ceill(long double x)
|
||||||
ceill(long double x)
|
|
||||||
{
|
{
|
||||||
union IEEEl2bits u = { .e = x };
|
union IEEEl2bits u = { .e = x };
|
||||||
int e = u.bits.exp - LDBL_MAX_EXP + 1;
|
int e = u.bits.exp - LDBL_MAX_EXP + 1;
|
||||||
|
|
|
||||||
|
|
@ -50,7 +50,7 @@ double floor(double x)
|
||||||
if (i0 < 0)
|
if (i0 < 0)
|
||||||
i0 += 0x00100000>>j0;
|
i0 += 0x00100000>>j0;
|
||||||
i0 &= ~i;
|
i0 &= ~i;
|
||||||
i1=0;
|
i1 = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (j0 > 51) {
|
} else if (j0 > 51) {
|
||||||
|
|
@ -59,18 +59,18 @@ double floor(double x)
|
||||||
else
|
else
|
||||||
return x; /* x is integral */
|
return x; /* x is integral */
|
||||||
} else {
|
} else {
|
||||||
i = ((uint32_t)(0xffffffff))>>(j0-20);
|
i = (uint32_t)0xffffffff>>(j0-20);
|
||||||
if ((i1&i) == 0)
|
if ((i1&i) == 0)
|
||||||
return x; /* x is integral */
|
return x; /* x is integral */
|
||||||
/* raise inexact flag */
|
/* raise inexact flag */
|
||||||
if (huge+x > 0.0) {
|
if (huge+x > 0.0) {
|
||||||
if (i0 < 0) {
|
if (i0 < 0) {
|
||||||
if (j0 == 20)
|
if (j0 == 20)
|
||||||
i0+=1;
|
i0++;
|
||||||
else {
|
else {
|
||||||
j = i1+(1<<(52-j0));
|
j = i1+(1<<(52-j0));
|
||||||
if (j < i1)
|
if (j < i1)
|
||||||
i0 += 1; /* got a carry */
|
i0++; /* got a carry */
|
||||||
i1 = j;
|
i1 = j;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -97,6 +97,6 @@ long double floorl(long double x)
|
||||||
if (huge + x > 0.0)
|
if (huge + x > 0.0)
|
||||||
u.bits.manl &= ~m;
|
u.bits.manl &= ~m;
|
||||||
}
|
}
|
||||||
return (u.e);
|
return u.e;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue