From fd0b6ef3fb566996121971ada06b1d2ba847d8d0 Mon Sep 17 00:00:00 2001 From: nobu Date: Sun, 25 Dec 2016 08:47:22 +0000 Subject: bignum.c: precise fdiv * bignum.c (big_fdiv): more precise calculation. [ruby-dev:49915] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57179 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- bignum.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bignum.c b/bignum.c index 41b1043b99..bc283ac89a 100644 --- a/bignum.c +++ b/bignum.c @@ -6102,6 +6102,8 @@ big_fdiv(VALUE x, VALUE y, long ey) l = BIGNUM_LEN(x); ex = l * BITSPERDIG - nlz(BDIGITS(x)[l-1]); ex -= 2 * DBL_BIGDIG * BITSPERDIG; + if (ex > BITSPERDIG) ex -= BITSPERDIG; + else if (ex > 0) ex = 0; if (ex) x = big_shift(x, ex); bigdivrem(x, y, &z, 0); -- cgit v1.2.3