diff options
author | marcandre <marcandre@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2014-02-28 02:03:30 +0000 |
---|---|---|
committer | marcandre <marcandre@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2014-02-28 02:03:30 +0000 |
commit | e184e31c0956e49df2f121c4a8f024286c894993 (patch) | |
tree | f8c77e2e36370fe398772ffa9aa81080964c0938 /numeric.c | |
parent | debb5e4cb73c6a279916fa887015a31f8643986d (diff) | |
download | ruby-e184e31c0956e49df2f121c4a8f024286c894993.tar.gz |
* numeric.c: Simplify [ruby-core:61106] [Bug #9570]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@45205 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'numeric.c')
-rw-r--r-- | numeric.c | 22 |
1 files changed, 9 insertions, 13 deletions
@@ -1805,26 +1805,22 @@ VALUE ruby_num_interval_step_size(VALUE from, VALUE to, VALUE step, int excl) { if (FIXNUM_P(from) && FIXNUM_P(to) && FIXNUM_P(step)) { - long delta, diff, result; + long delta, diff; diff = FIX2LONG(step); if (!diff) rb_num_zerodiv(); delta = FIX2LONG(to) - FIX2LONG(from); + if (diff < 0) { + diff = -diff; + delta = -delta; + } if (excl) { - delta += (diff > 0 ? -1 : +1); + delta--; } - if (delta) { - if (diff < 0) { - if (delta > 0) return INT2FIX(0); - diff = -diff; - delta = -delta; - } - else { - if (delta < 0) return INT2FIX(0); - } + if (delta < 0) { + return INT2FIX(0); } - result = delta / diff; - return LONG2FIX(result >= 0 ? result + 1 : 0); + return LONG2FIX(delta / diff + 1); } else if (RB_TYPE_P(from, T_FLOAT) || RB_TYPE_P(to, T_FLOAT) || RB_TYPE_P(step, T_FLOAT)) { double n = ruby_float_step_size(NUM2DBL(from), NUM2DBL(to), NUM2DBL(step), excl); |