aboutsummaryrefslogtreecommitdiffstats
path: root/numeric.c
diff options
context:
space:
mode:
Diffstat (limited to 'numeric.c')
-rw-r--r--numeric.c15
1 files changed, 5 insertions, 10 deletions
diff --git a/numeric.c b/numeric.c
index 6910827762..131fa84d62 100644
--- a/numeric.c
+++ b/numeric.c
@@ -1008,8 +1008,10 @@ flodivmod(double x, double y, double *divp, double *modp)
}
if (isinf(x) && !isinf(y))
div = x;
- else
+ else {
div = (x - mod) / y;
+ if (modp && divp) div = round(div);
+ }
if (y*mod < 0) {
mod += y;
div -= 1.0;
@@ -1066,7 +1068,6 @@ flo_mod(VALUE x, VALUE y)
static VALUE
dbl2ival(double d)
{
- d = round(d);
if (FIXABLE(d)) {
return LONG2FIX((long)d);
}
@@ -1761,13 +1762,7 @@ static VALUE
flo_ceil(VALUE num)
{
double f = ceil(RFLOAT_VALUE(num));
- long val;
-
- if (!FIXABLE(f)) {
- return rb_dbl2big(f);
- }
- val = (long)f;
- return LONG2FIX(val);
+ return dbl2ival(f);
}
/*
@@ -1856,7 +1851,7 @@ flo_round(int argc, VALUE *argv, VALUE num)
}
number = RFLOAT_VALUE(num);
if (ndigits == 0) {
- return dbl2ival(number);
+ return dbl2ival(round(number));
}
frexp(number, &binexp);