summaryrefslogtreecommitdiff
path: root/numeric.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>1998-03-11 09:19:50 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>1998-03-11 09:19:50 +0000
commitbe1d214ace9068204a10160cd9a0e43d1ce9ecf7 (patch)
tree3648e60f8a3165c0172322ce3e375002e0676428 /numeric.c
parent58649234258a476f7cd69db41f89405e117d4b32 (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.c108
1 files changed, 108 insertions, 0 deletions
diff --git a/numeric.c b/numeric.c
index d29a3fec3a..0266bbe023 100644
--- a/numeric.c
+++ b/numeric.c
@@ -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);