aboutsummaryrefslogtreecommitdiffstats
path: root/src/floatfns.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/floatfns.c')
-rw-r--r--src/floatfns.c19
1 files changed, 17 insertions, 2 deletions
diff --git a/src/floatfns.c b/src/floatfns.c
index bd3f2dec80a..6d7fc1452d3 100644
--- a/src/floatfns.c
+++ b/src/floatfns.c
@@ -275,9 +275,24 @@ DEFUN ("abs", Fabs, Sabs, 1, 1, 0,
275 doc: /* Return the absolute value of ARG. */) 275 doc: /* Return the absolute value of ARG. */)
276 (register Lisp_Object arg) 276 (register Lisp_Object arg)
277{ 277{
278 CHECK_FIXNUM_OR_FLOAT (arg); 278 CHECK_NUMBER (arg);
279 279
280 if (FLOATP (arg)) 280 if (BIGNUMP (arg))
281 {
282 mpz_t val;
283 mpz_init (val);
284 mpz_abs (val, XBIGNUM (arg)->value);
285 arg = make_number (val);
286 mpz_clear (val);
287 }
288 else if (FIXNUMP (arg) && XINT (arg) == MOST_NEGATIVE_FIXNUM)
289 {
290 mpz_t val;
291 mpz_init_set_si (val, - MOST_NEGATIVE_FIXNUM);
292 arg = make_number (val);
293 mpz_clear (val);
294 }
295 else if (FLOATP (arg))
281 arg = make_float (fabs (XFLOAT_DATA (arg))); 296 arg = make_float (fabs (XFLOAT_DATA (arg)));
282 else if (XINT (arg) < 0) 297 else if (XINT (arg) < 0)
283 XSETINT (arg, - XINT (arg)); 298 XSETINT (arg, - XINT (arg));