diff options
author | naruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-03-11 13:03:46 +0000 |
---|---|---|
committer | naruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-03-11 13:03:46 +0000 |
commit | ea52cac1487cea91a148daffbfe0dacef672051b (patch) | |
tree | 4a223af18f6b18978aedda2c11bfe771254a990e /numeric.c | |
parent | 2f1cc54d5fd9078c90ad240fce4f132feb1eaffe (diff) |
merge revision(s) 57227: [Backport #13078]
numeric.c: reduce fdiv
* numeric.c (rb_int_fdiv_double): reduce first for more precise
result. [ruby-core:78886] [Bug #13078]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_4@57840 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'numeric.c')
-rw-r--r-- | numeric.c | 7 |
1 files changed, 7 insertions, 0 deletions
@@ -3614,6 +3614,13 @@ fix_fdiv_double(VALUE x, VALUE y) double rb_int_fdiv_double(VALUE x, VALUE y) { + if (RB_INTEGER_TYPE_P(y) && !FIXNUM_ZERO_P(y)) { + VALUE gcd = rb_gcd(x, y); + if (!FIXNUM_ZERO_P(gcd)) { + x = rb_int_idiv(x, gcd); + y = rb_int_idiv(y, gcd); + } + } if (FIXNUM_P(x)) { return fix_fdiv_double(x, y); } |