numeric.c: optimize Fixnum<->Bignum comparisons
* numeric.c (fix_gt, fix_ge, fix_lt, fix_le): optimize comparisons Fixnum against Bignum by rb_big_cmp in inversed order without new Bignum instance. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@54201 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
cb390bef8a
commit
be05c5798f
@ -1,3 +1,9 @@
|
|||||||
|
Sun Mar 20 18:53:49 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||||
|
|
||||||
|
* numeric.c (fix_gt, fix_ge, fix_lt, fix_le): optimize comparisons
|
||||||
|
Fixnum against Bignum by rb_big_cmp in inversed order without
|
||||||
|
new Bignum instance.
|
||||||
|
|
||||||
Sun Mar 20 18:44:52 2016 NARUSE, Yui <naruse@ruby-lang.org>
|
Sun Mar 20 18:44:52 2016 NARUSE, Yui <naruse@ruby-lang.org>
|
||||||
|
|
||||||
* time.c (add): remove FIXABLE() which is in LONG2NUM().
|
* time.c (add): remove FIXABLE() which is in LONG2NUM().
|
||||||
|
@ -3482,7 +3482,7 @@ fix_gt(VALUE x, VALUE y)
|
|||||||
return Qfalse;
|
return Qfalse;
|
||||||
}
|
}
|
||||||
else if (RB_TYPE_P(y, T_BIGNUM)) {
|
else if (RB_TYPE_P(y, T_BIGNUM)) {
|
||||||
return FIX2INT(rb_big_cmp(rb_int2big(FIX2LONG(x)), y)) > 0 ? Qtrue : Qfalse;
|
return rb_big_cmp(y, x) == INT2FIX(-1) ? Qtrue : Qfalse;
|
||||||
}
|
}
|
||||||
else if (RB_TYPE_P(y, T_FLOAT)) {
|
else if (RB_TYPE_P(y, T_FLOAT)) {
|
||||||
return rb_integer_float_cmp(x, y) == INT2FIX(1) ? Qtrue : Qfalse;
|
return rb_integer_float_cmp(x, y) == INT2FIX(1) ? Qtrue : Qfalse;
|
||||||
@ -3508,7 +3508,7 @@ fix_ge(VALUE x, VALUE y)
|
|||||||
return Qfalse;
|
return Qfalse;
|
||||||
}
|
}
|
||||||
else if (RB_TYPE_P(y, T_BIGNUM)) {
|
else if (RB_TYPE_P(y, T_BIGNUM)) {
|
||||||
return FIX2INT(rb_big_cmp(rb_int2big(FIX2LONG(x)), y)) >= 0 ? Qtrue : Qfalse;
|
return rb_big_cmp(y, x) != INT2FIX(+1) ? Qtrue : Qfalse;
|
||||||
}
|
}
|
||||||
else if (RB_TYPE_P(y, T_FLOAT)) {
|
else if (RB_TYPE_P(y, T_FLOAT)) {
|
||||||
VALUE rel = rb_integer_float_cmp(x, y);
|
VALUE rel = rb_integer_float_cmp(x, y);
|
||||||
@ -3534,7 +3534,7 @@ fix_lt(VALUE x, VALUE y)
|
|||||||
return Qfalse;
|
return Qfalse;
|
||||||
}
|
}
|
||||||
else if (RB_TYPE_P(y, T_BIGNUM)) {
|
else if (RB_TYPE_P(y, T_BIGNUM)) {
|
||||||
return FIX2INT(rb_big_cmp(rb_int2big(FIX2LONG(x)), y)) < 0 ? Qtrue : Qfalse;
|
return rb_big_cmp(y, x) == INT2FIX(+1) ? Qtrue : Qfalse;
|
||||||
}
|
}
|
||||||
else if (RB_TYPE_P(y, T_FLOAT)) {
|
else if (RB_TYPE_P(y, T_FLOAT)) {
|
||||||
return rb_integer_float_cmp(x, y) == INT2FIX(-1) ? Qtrue : Qfalse;
|
return rb_integer_float_cmp(x, y) == INT2FIX(-1) ? Qtrue : Qfalse;
|
||||||
@ -3560,7 +3560,7 @@ fix_le(VALUE x, VALUE y)
|
|||||||
return Qfalse;
|
return Qfalse;
|
||||||
}
|
}
|
||||||
else if (RB_TYPE_P(y, T_BIGNUM)) {
|
else if (RB_TYPE_P(y, T_BIGNUM)) {
|
||||||
return FIX2INT(rb_big_cmp(rb_int2big(FIX2LONG(x)), y)) <= 0 ? Qtrue : Qfalse;
|
return rb_big_cmp(y, x) != INT2FIX(-1) ? Qtrue : Qfalse;
|
||||||
}
|
}
|
||||||
else if (RB_TYPE_P(y, T_FLOAT)) {
|
else if (RB_TYPE_P(y, T_FLOAT)) {
|
||||||
VALUE rel = rb_integer_float_cmp(x, y);
|
VALUE rel = rb_integer_float_cmp(x, y);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user