diff options
author | tadf <tadf@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-12-29 12:23:55 +0000 |
---|---|---|
committer | tadf <tadf@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-12-29 12:23:55 +0000 |
commit | 07ecf8a9dbdd3d8e7c79007b34c28c9b073aa894 (patch) | |
tree | 25d3abdfaa4bd1499f9f68c61deb6b050ea97cf2 /numeric.c | |
parent | 122b30e32122804ecafd7a3efdfc32dbbac87fb9 (diff) | |
download | ruby-07ecf8a9dbdd3d8e7c79007b34c28c9b073aa894.tar.gz ruby-07ecf8a9dbdd3d8e7c79007b34c28c9b073aa894.tar.xz ruby-07ecf8a9dbdd3d8e7c79007b34c28c9b073aa894.zip |
* numeric.c: Infinity.numerator returns self. [experimental]
* numeric.c: Infinity.denominator returns 1. [experimental]
git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@21176 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'numeric.c')
-rw-r--r-- | numeric.c | 20 |
1 files changed, 20 insertions, 0 deletions
@@ -1352,6 +1352,23 @@ flo_truncate(VALUE num) return LONG2FIX(val); } +static VALUE +flo_numerator(VALUE num) +{ + double d = RFLOAT_VALUE(num); + if (isinf(d) || isnan(d)) + return num; + return rb_call_super(0, 0); +} + +static VALUE +flo_denominator(VALUE num) +{ + double d = RFLOAT_VALUE(num); + if (isinf(d) || isnan(d)) + return INT2FIX(1); + return rb_call_super(0, 0); +} /* * call-seq: @@ -3247,6 +3264,9 @@ Init_Numeric(void) rb_define_method(rb_cFloat, "round", flo_round, -1); rb_define_method(rb_cFloat, "truncate", flo_truncate, 0); + rb_define_method(rb_cFloat, "numerator", flo_numerator, 0); + rb_define_method(rb_cFloat, "denominator", flo_denominator, 0); + rb_define_method(rb_cFloat, "nan?", flo_is_nan_p, 0); rb_define_method(rb_cFloat, "infinite?", flo_is_infinite_p, 0); rb_define_method(rb_cFloat, "finite?", flo_is_finite_p, 0); |