diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2016-04-03 00:34:31 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2016-04-03 00:34:31 +0000 |
commit | b4c0aac4c8ca217a3579e3e95fb2e7c993234955 (patch) | |
tree | 75c0ad890d02af2ece2ec7983800d867dbeb624a /numeric.c | |
parent | 2b82986034688e90ff7de092c4bc6b75b1510d0b (diff) |
numeric.c: dbl2ival no longer rounds
* numeric.c (flodivmod): round division if it is a finite number
and module is required.
* numeric.c (dbl2ival): do not round here.
* numeric.c (flo_ceil): use dbl2ival.
* numeric.c (flo_round): round explicitly.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@54477 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'numeric.c')
-rw-r--r-- | numeric.c | 15 |
1 files changed, 5 insertions, 10 deletions
@@ -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); |