aboutsummaryrefslogtreecommitdiffstats
path: root/src/floatfns.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/floatfns.c')
-rw-r--r--src/floatfns.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/floatfns.c b/src/floatfns.c
index 2f33b8652b2..13ab7b0359f 100644
--- a/src/floatfns.c
+++ b/src/floatfns.c
@@ -355,6 +355,8 @@ rounding_driver (Lisp_Object arg, Lisp_Object divisor,
355 CHECK_NUMBER (divisor); 355 CHECK_NUMBER (divisor);
356 if (!FLOATP (arg) && !FLOATP (divisor)) 356 if (!FLOATP (arg) && !FLOATP (divisor))
357 { 357 {
358 /* Divide as integers. Converting to double might lose
359 info, even for fixnums; also see the FIXME below. */
358 if (EQ (divisor, make_fixnum (0))) 360 if (EQ (divisor, make_fixnum (0)))
359 xsignal0 (Qarith_error); 361 xsignal0 (Qarith_error);
360 int_divide (mpz[0], 362 int_divide (mpz[0],
@@ -363,10 +365,11 @@ rounding_driver (Lisp_Object arg, Lisp_Object divisor,
363 return make_integer_mpz (); 365 return make_integer_mpz ();
364 } 366 }
365 367
366 double f1 = FLOATP (arg) ? XFLOAT_DATA (arg) : XFIXNUM (arg); 368 double f1 = XFLOATINT (arg);
367 double f2 = FLOATP (divisor) ? XFLOAT_DATA (divisor) : XFIXNUM (divisor); 369 double f2 = XFLOATINT (divisor);
368 if (! IEEE_FLOATING_POINT && f2 == 0) 370 if (! IEEE_FLOATING_POINT && f2 == 0)
369 xsignal0 (Qarith_error); 371 xsignal0 (Qarith_error);
372 /* FIXME: This division rounds, so the result is double-rounded. */
370 d = f1 / f2; 373 d = f1 / f2;
371 } 374 }
372 375