util.c: round nearly middle value

* util.c (ruby_dtoa): [EXPERIMENTAL] adjust the case that the
  Float value is close to the exact but unrepresentable middle
  value of two values in the given precision, as r55604.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@55621 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2016-07-10 05:27:27 +00:00
parent 38ea561319
commit 295f60b94d
3 changed files with 14 additions and 0 deletions

4
util.c
View file

@ -3452,8 +3452,12 @@ ruby_dtoa(double d_, int mode, int ndigits, int *decpt, int *sign, char **rve)
ilim = i;
*s++ = '0' + (int)L;
if (i == ilim) {
double x;
if (dval(d) > 0.5 + dval(eps))
goto bump_up;
else if (!isinf(x = d_ * tens[ilim-1] + 0.5) &&
dval(d) > modf(x, &x))
goto bump_up;
else if (dval(d) < 0.5 - dval(eps)) {
while (*--s == '0') ;
s++;