diff options
-rw-r--r-- | benchmark/float_neg_posi.yml | 8 | ||||
-rw-r--r-- | numeric.c | 30 | ||||
-rw-r--r-- | numeric.rb | 22 |
3 files changed, 30 insertions, 30 deletions
diff --git a/benchmark/float_neg_posi.yml b/benchmark/float_neg_posi.yml new file mode 100644 index 0000000000..172db1bf6d --- /dev/null +++ b/benchmark/float_neg_posi.yml @@ -0,0 +1,8 @@ +prelude: | + flo = 4.2 +benchmark: + negative?: | + flo.negative? + positive?: | + flo.positive? +loop_count: 20000000 @@ -2386,34 +2386,6 @@ flo_truncate(int argc, VALUE *argv, VALUE num) /* * call-seq: - * float.positive? -> true or false - * - * Returns +true+ if +float+ is greater than 0. - */ - -static VALUE -flo_positive_p(VALUE num) -{ - double f = RFLOAT_VALUE(num); - return f > 0.0 ? Qtrue : Qfalse; -} - -/* - * call-seq: - * float.negative? -> true or false - * - * Returns +true+ if +float+ is less than 0. - */ - -static VALUE -flo_negative_p(VALUE num) -{ - double f = RFLOAT_VALUE(num); - return f < 0.0 ? Qtrue : Qfalse; -} - -/* - * call-seq: * num.floor([ndigits]) -> integer or float * * Returns the largest number less than or equal to +num+ with @@ -5654,8 +5626,6 @@ Init_Numeric(void) rb_define_method(rb_cFloat, "finite?", rb_flo_is_finite_p, 0); rb_define_method(rb_cFloat, "next_float", flo_next_float, 0); rb_define_method(rb_cFloat, "prev_float", flo_prev_float, 0); - rb_define_method(rb_cFloat, "positive?", flo_positive_p, 0); - rb_define_method(rb_cFloat, "negative?", flo_negative_p, 0); } #undef rb_float_value diff --git a/numeric.rb b/numeric.rb index fbddaa9f6d..0746a83820 100644 --- a/numeric.rb +++ b/numeric.rb @@ -204,4 +204,26 @@ class Float Primitive.attr! 'inline' Primitive.cexpr! 'FLOAT_ZERO_P(self) ? Qtrue : Qfalse' end + + # + # call-seq: + # float.positive? -> true or false + # + # Returns +true+ if +float+ is greater than 0. + # + def positive? + Primitive.attr! 'inline' + Primitive.cexpr! 'RFLOAT_VALUE(self) > 0.0 ? Qtrue : Qfalse' + end + + # + # call-seq: + # float.negative? -> true or false + # + # Returns +true+ if +float+ is less than 0. + # + def negative? + Primitive.attr! 'inline' + Primitive.cexpr! 'RFLOAT_VALUE(self) < 0.0 ? Qtrue : Qfalse' + end end |