summaryrefslogtreecommitdiff
path: root/src/floatfns.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/floatfns.c')
-rw-r--r--src/floatfns.c27
1 files changed, 11 insertions, 16 deletions
diff --git a/src/floatfns.c b/src/floatfns.c
index 2d76b97eec7..a913aad5aac 100644
--- a/src/floatfns.c
+++ b/src/floatfns.c
@@ -306,27 +306,22 @@ This is the same as the exponent of a float. */)
if (FLOATP (arg))
{
double f = XFLOAT_DATA (arg);
-
if (f == 0)
- value = MOST_NEGATIVE_FIXNUM;
- else if (isfinite (f))
- {
- int ivalue;
- frexp (f, &ivalue);
- value = ivalue - 1;
- }
- else
- value = MOST_POSITIVE_FIXNUM;
+ return make_float (-HUGE_VAL);
+ if (!isfinite (f))
+ return f < 0 ? make_float (-f) : arg;
+ int ivalue;
+ frexp (f, &ivalue);
+ value = ivalue - 1;
}
- else if (BIGNUMP (arg))
+ else if (!FIXNUMP (arg))
value = mpz_sizeinbase (XBIGNUM (arg)->value, 2) - 1;
else
{
- eassert (FIXNUMP (arg));
- EMACS_INT i = eabs (XFIXNUM (arg));
- value = (i == 0
- ? MOST_NEGATIVE_FIXNUM
- : EMACS_UINT_WIDTH - 1 - ecount_leading_zeros (i));
+ EMACS_INT i = XFIXNUM (arg);
+ if (i == 0)
+ return make_float (-HUGE_VAL);
+ value = EMACS_UINT_WIDTH - 1 - ecount_leading_zeros (eabs (i));
}
return make_fixnum (value);