Feature #12039
closed
Fixnum#infinite?/Bignum#infinite or Numeric#infinte, consistent with Float#infinite? and BigDecimal#infinite?
Added by ioquatix (Samuel Williams) almost 9 years ago.
Updated about 8 years ago.
Description
We have an issue where it is not easy to ask if a number is +ve or -ve infinity. https://github.com/rails/arel/issues/411
Both Float and BigDecimal do respond to infinite? but Integer derivatives don't. It sort of makes sense, since we don't have an infinity value for Fixnum/Bignum. However, it makes polymorphic code hard.
[13] pry(main)> Float::INFINITY.infinite?
=> 1
[14] pry(main)> -Float::INFINITY.infinite?
=> -1
[15] pry(main)> BigDecimal::INFINITY.infinite?
=> 1
[16] pry(main)> -BigDecimal::INFINITY.infinite?
=> -1
Given a Numeric value x, it would be nice to query if it is INFINITY or not. Propose adding a default implementation to Numeric, which always returns false or nil.
It might also make sense to consider if other "predicates" make sense, e.g. nan?
They should be declared on Numeric with a default logical implementation where possible.
This is probably a useful method to be able to rely on universally, even if Fixnum
and Bignum
just return false
.
Another real-world use-case where I found Numeric#infinite? useful is JSON validation. Infinities are not allowed in JSON so a programmer want to filter them out before converting a Numeric into JSON, but that is not straight-forward right now. With this method it becomes much OO-ish.
Agreed. Add #finite? and #infinite?
Matz.
- Tracker changed from Bug to Feature
What behavior is desirable for a Complex?
I think the following definition is acceptable for a Complex:
def inifinite?
self.magnitude.infinite?
end
This looks good, do you think we can integrate this at some point? What do we need to do?
- Assignee set to mrkn (Kenta Murata)
- Status changed from Open to Closed
Applied in changeset r55702.
numeric.c, complex.c: Add finite? and infinite? consistent with Float
-
numeric.c (num_finite_p, num_infinite_p): Add Numeric#finite? and
Numeric#infinite? [Feature #12039] [ruby-core:73618]
-
complex.c (rb_complex_finite_p): Add Complex#finite?
-
complex.c (rb_complex_infinite_p): Add Complex#infinite?
-
test/ruby/test_bignum.rb: Add test for Integer#finite? and
Integer#infinite?
-
test/ruby/test_fixnum.rb: ditto.
-
test/ruby/test_rational.rb: Add test for Rational#finite? and
Rational#infinite?
-
test/ruby/test_complex.rb: Add test for Complex#finite? and
Complex#infinite?
Thank you for your hard work :)
- Related to Feature #10641: Introduce Fixnum#finite? and Bignum#finite? added
Also available in: Atom
PDF
Like0
Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0