diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-06-21 07:21:10 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-06-21 07:21:10 +0000 |
commit | a2b83212d6cf280d13cc2e00d613fa5fe140a5c1 (patch) | |
tree | 1e09ba1bcb9c5a543f318adf5418c57338c8095a | |
parent | 47f5c15e8d6a6c78703b363e9fd351ac44b616e1 (diff) | |
download | ruby-a2b83212d6cf280d13cc2e00d613fa5fe140a5c1.tar.gz |
* numeric.c (flo_round): get rid of overflow.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@17498 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | numeric.c | 15 |
2 files changed, 14 insertions, 5 deletions
@@ -1,3 +1,7 @@ +Sat Jun 21 16:21:07 2008 Nobuyoshi Nakada <nobu@ruby-lang.org> + + * numeric.c (flo_round): get rid of overflow. + Sat Jun 21 15:57:15 2008 Nobuyoshi Nakada <nobu@ruby-lang.org> * lib/rdoc/parsers/parse_rb.rb (RDoc#collect_first_comment): skip @@ -1299,11 +1299,16 @@ flo_round(int argc, VALUE *argv, VALUE num) while (--i >= 0) f = f*10.0; - if (ndigits < 0) number /= f; - else number *= f; - number = round(number); - if (ndigits < 0) number *= f; - else number /= f; + if (isinf(f)) { + if (ndigits < 0) number = 0; + } + else { + if (ndigits < 0) number /= f; + else number *= f; + number = round(number); + if (ndigits < 0) number *= f; + else number /= f; + } if (ndigits > 0) return DOUBLE2NUM(number); |