提交 7eabe8e6 编写于 作者: N nsz

math: minor cleanups in ceil and floor

上级 d79ac8c3
...@@ -34,7 +34,6 @@ double ceil(double x) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册