Issue #17631 has been updated by sawa (Tsuyoshi Sawada).


jtannas (Joel Tannas) wrote in #note-3:

> The definition of that number set is that it's the set of all real numbers plus the infinities. The infinities are still not real, even though they're in the set. https://mathworld.wolfram.com/AffinelyExtendedRealNumbers.html

> [I]t conflicts with the actual definitions of complex & real.. .. Changing the code to completely match the formal definitions would be a big change though, so I don't really know what the best option is.

It does not make sense to discuss about the mathematical definition of real numbers in this context because digital computers cannot handle real numbers in the first place. Hence, we are dealing with floating point numbers, which are approximation of real numbers, but not real numbers themselves.

----------------------------------------
Bug #17631: `Numeric#real?` incorrectly returns true for `NaN` and `INFINITY`
https://bugs.ruby-lang.org/issues/17631#change-91891

* Author: jtannas (Joel Tannas)
* Status: Open
* Priority: Normal
* ruby -v: ruby 2.7.2p137 (2020-10-01 revision 5445e04352) [x86_64-linux]
* Backport: 2.5: UNKNOWN, 2.6: UNKNOWN, 2.7: UNKNOWN, 3.0: UNKNOWN
----------------------------------------
In mathematics, infinity is not a real number. See https://math.stackexchange.com/a/750787
I don't have a source for this, but I also believe that `NaN` is not a real number.

`Numeric#real?` incorrectly returns `true` for both of these cases.

``` ruby
irb(main):001:0> Float::INFINITY.real?
=> true
irb(main):002:0> Float::NAN.real?
=> true
irb(main):003:0> require 'bigdecimal'
=> true
irb(main):004:0> BigDecimal::NAN.real?
=> true
irb(main):005:0> BigDecimal::INFINITY.real?
=> true
```

I ran into this while doing some math with logarithms, leading me to have to put in weird catches like `return nil if result.complex? || result.nan? || result.infinite?`

---
Originally reported here: https://stackoverflow.com/q/64795265/7950458



-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>