summaryrefslogtreecommitdiff
path: root/numeric.c
diff options
context:
space:
mode:
Diffstat (limited to 'numeric.c')
-rw-r--r--numeric.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/numeric.c b/numeric.c
index 01f9f45420..28ad30d764 100644
--- a/numeric.c
+++ b/numeric.c
@@ -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);
}