aboutsummaryrefslogtreecommitdiffstats
path: root/numeric.c
diff options
context:
space:
mode:
authormarcandre <marcandre@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-02-28 02:03:30 +0000
committermarcandre <marcandre@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-02-28 02:03:30 +0000
commite184e31c0956e49df2f121c4a8f024286c894993 (patch)
treef8c77e2e36370fe398772ffa9aa81080964c0938 /numeric.c
parentdebb5e4cb73c6a279916fa887015a31f8643986d (diff)
downloadruby-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.c22
1 files changed, 9 insertions, 13 deletions
diff --git a/numeric.c b/numeric.c
index 99a1c7d60e..88fff399c7 100644
--- a/numeric.c
+++ b/numeric.c
@@ -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);