1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

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
This commit is contained in:
nobu 2016-04-03 00:34:31 +00:00
parent 2b82986034
commit b4c0aac4c8
2 changed files with 16 additions and 10 deletions

View file

@ -1,3 +1,14 @@
Sun Apr 3 09:34:29 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
* 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.
Sat Apr 2 15:24:18 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
* include/ruby/intern.h (rb_check_arity): returns argc.

View file

@ -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);