diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 1998-03-11 09:19:50 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 1998-03-11 09:19:50 +0000 |
commit | be1d214ace9068204a10160cd9a0e43d1ce9ecf7 (patch) | |
tree | 3648e60f8a3165c0172322ce3e375002e0676428 /numeric.c | |
parent | 58649234258a476f7cd69db41f89405e117d4b32 (diff) |
speed up patch 2
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/v1_1r@115 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'numeric.c')
-rw-r--r-- | numeric.c | 108 |
1 files changed, 108 insertions, 0 deletions
@@ -404,6 +404,110 @@ flo_cmp(x, y) } static VALUE +flo_gt(x, y) + VALUE x, y; +{ + double a, b; + + a = RFLOAT(x)->value; + switch (TYPE(y)) { + case T_FIXNUM: + b = (double)FIX2INT(y); + break; + + case T_BIGNUM: + b = big2dbl(y); + break; + + case T_FLOAT: + b = RFLOAT(y)->value; + break; + + default: + return num_coerce_bin(x, y); + } + return (a > b)?TRUE:FALSE; +} + +static VALUE +flo_ge(x, y) + VALUE x, y; +{ + double a, b; + + a = RFLOAT(x)->value; + switch (TYPE(y)) { + case T_FIXNUM: + b = (double)FIX2INT(y); + break; + + case T_BIGNUM: + b = big2dbl(y); + break; + + case T_FLOAT: + b = RFLOAT(y)->value; + break; + + default: + return num_coerce_bin(x, y); + } + return (a >= b)?TRUE:FALSE; +} + +static VALUE +flo_lt(x, y) + VALUE x, y; +{ + double a, b; + + a = RFLOAT(x)->value; + switch (TYPE(y)) { + case T_FIXNUM: + b = (double)FIX2INT(y); + break; + + case T_BIGNUM: + b = big2dbl(y); + break; + + case T_FLOAT: + b = RFLOAT(y)->value; + break; + + default: + return num_coerce_bin(x, y); + } + return (a < b)?TRUE:FALSE; +} + +static VALUE +flo_le(x, y) + VALUE x, y; +{ + double a, b; + + a = RFLOAT(x)->value; + switch (TYPE(y)) { + case T_FIXNUM: + b = (double)FIX2INT(y); + break; + + case T_BIGNUM: + b = big2dbl(y); + break; + + case T_FLOAT: + b = RFLOAT(y)->value; + break; + + default: + return num_coerce_bin(x, y); + } + return (a <= b)?TRUE:FALSE; +} + +static VALUE flo_eql(x, y) VALUE x, y; { @@ -1161,6 +1265,10 @@ Init_Numeric() rb_define_method(cFloat, "**", flo_pow, 1); rb_define_method(cFloat, "==", flo_eq, 1); rb_define_method(cFloat, "<=>", flo_cmp, 1); + rb_define_method(cFloat, ">", flo_gt, 1); + rb_define_method(cFloat, ">=", flo_ge, 1); + rb_define_method(cFloat, "<", flo_lt, 1); + rb_define_method(cFloat, "<=", flo_le, 1); rb_define_method(cFloat, "eql?", flo_eql, 1); rb_define_method(cFloat, "hash", flo_hash, 0); rb_define_method(cFloat, "to_i", flo_to_i, 0); |