]> git.eshelyaron.com Git - emacs.git/commitdiff
Allow conversion of bignums to floats
authorTom Tromey <tom@tromey.com>
Thu, 5 Jul 2018 19:17:36 +0000 (13:17 -0600)
committerTom Tromey <tom@tromey.com>
Fri, 13 Jul 2018 04:12:27 +0000 (22:12 -0600)
* src/floatfns.c (extract_float, Ffloat): Handle bignums.
* src/lisp.h (XFLOATINT): Handle bignums.
* test/src/floatfns-tests.el (bignum-to-float): New test.

src/floatfns.c
src/lisp.h
test/src/floatfns-tests.el

index 766044ba35c84c4e5fccdbea32863685c3859511..bd3f2dec80afd3fb2a6d2926d09fe73e46aa3f45 100644 (file)
@@ -67,7 +67,7 @@ CHECK_FLOAT (Lisp_Object x)
 double
 extract_float (Lisp_Object num)
 {
-  CHECK_FIXNUM_OR_FLOAT (num);
+  CHECK_NUMBER (num);
   return XFLOATINT (num);
 }
 \f
@@ -289,8 +289,10 @@ DEFUN ("float", Ffloat, Sfloat, 1, 1, 0,
        doc: /* Return the floating point number equal to ARG.  */)
   (register Lisp_Object arg)
 {
-  CHECK_FIXNUM_OR_FLOAT (arg);
+  CHECK_NUMBER (arg);
 
+  if (BIGNUMP (arg))
+    return make_float (mpz_get_d (XBIGNUM (arg)->value));
   if (FIXNUMP (arg))
     return make_float ((double) XINT (arg));
   else                         /* give 'em the same float back */
index be6793204942558f8858742269b4f5d46729bc91..63b057073d004215d550481487d0b326d41cd90b 100644 (file)
@@ -2919,6 +2919,8 @@ CHECK_FIXNAT (Lisp_Object x)
 INLINE double
 XFLOATINT (Lisp_Object n)
 {
+  if (BIGNUMP (n))
+    return mpz_get_d (XBIGNUM (n)->value);
   return FLOATP (n) ? XFLOAT_DATA (n) : XINT (n);
 }
 
index cb173eea76da03c6cdaca1aa142fc0aa6163a28c..c87445b6bd2b185e41eb87f63d96efdbcd2a28cf 100644 (file)
@@ -34,4 +34,8 @@
   (should-error (ftruncate 0) :type 'wrong-type-argument)
   (should-error (fround 0) :type 'wrong-type-argument))
 
+(ert-deftest bignum-to-float ()
+  (should (eql (float (+ most-positive-fixnum 1))
+               (+ (float most-positive-fixnum) 1))))
+
 (provide 'floatfns-tests)