From 06b5bcd639bf97fc77dc89dd52f136d4f262e888 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Sat, 18 Aug 2018 23:27:47 -0700 Subject: [PATCH] =?utf8?q?Fix=20bug=20with=20=E2=80=98mod=E2=80=99=20and?= =?utf8?q?=20float+bignum?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Problem reported by Andy Moreton in: https://lists.gnu.org/r/emacs-devel/2018-08/msg00442.html * src/floatfns.c (fmod_float): Work even if an arg is a bignum. * test/src/floatfns-tests.el (bignum-mod): New test. --- src/floatfns.c | 6 ++---- test/src/floatfns-tests.el | 3 +++ 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/floatfns.c b/src/floatfns.c index ea2eb1016b1..713d42694ff 100644 --- a/src/floatfns.c +++ b/src/floatfns.c @@ -514,10 +514,8 @@ With optional DIVISOR, truncate ARG/DIVISOR. */) Lisp_Object fmod_float (Lisp_Object x, Lisp_Object y) { - double f1, f2; - - f1 = FLOATP (x) ? XFLOAT_DATA (x) : XFIXNUM (x); - f2 = FLOATP (y) ? XFLOAT_DATA (y) : XFIXNUM (y); + double f1 = XFLOATINT (x); + double f2 = XFLOATINT (y); f1 = fmod (f1, f2); diff --git a/test/src/floatfns-tests.el b/test/src/floatfns-tests.el index 7714c05d60a..43a2e278290 100644 --- a/test/src/floatfns-tests.el +++ b/test/src/floatfns-tests.el @@ -46,4 +46,7 @@ (should (= (+ (logb most-positive-fixnum) 1) (logb (+ most-positive-fixnum 1))))) +(ert-deftest bignum-mod () + (should (= 0 (mod (1+ most-positive-fixnum) 2.0)))) + (provide 'floatfns-tests) -- 2.39.2