Issue #9799 has been updated by cremno phobia.


Marcus Stollsteimer wrote:
> Wait, wait...
> 
> So you introduce mathematically wrong behaviour with the argument that there already is some other wrong behaviour???

I don't consider it wrong for a programming language. Maybe these special cases make less sense than the other ones, but they exist in many other languages. Even in numerical ones. That is my argument. But as I've said I'd be okay with the uncommon choice of not having them.


Julia (a nice language, by the way):

~~~
julia> atan2(Inf, Inf)
0.7853981633974483

julia> atan2(BigFloat(Inf), BigFloat(Inf))
7.853981633974483096156608458198757210492923498437764552437361480769541015715495
e-01 with 256 bits of precision
~~~

GNU Octave: https://www.gnu.org/software/octave/doc/interpreter/Trigonometry.html
NumPy: http://docs.scipy.org/doc/numpy/reference/generated/numpy.arctan2.html

----------------------------------------
Feature #9799: change behavior of Math::atan2 if y and x are both Float::INFINITY
https://bugs.ruby-lang.org/issues/9799#change-46528

* Author: cremno phobia
* Status: Closed
* Priority: Normal
* Assignee: 
* Category: core
* Target version: 
----------------------------------------
The current behavior when y and x are either negative or positive infinity is:

~~~ruby
Math.atan2(Float::INFINITY, Float::INFINITY)  # raises Math::DomainError
~~~

The attached diff changes it to:

~~~ruby
Math.atan2(Float::INFINITY, Float::INFINITY)  # => 0.7853981633974483
~~~

I think a domain error isn't desirable here. Is it even one? Other languages like Go, Python, Java or Javascript seem to return the expected result. .NET languages return NaN.

ISO C99/C11 also does, if the implementation follows the normative Annex F. This isn't always the case, but there is already a special case when y and x are zero, so I think this one is acceptable, too.


http://golang.org/src/pkg/math/atan2.go
http://hg.python.org/cpython/file/62438d1b11c7/Modules/mathmodule.c#l516
http://docs.oracle.com/javase/7/docs/api/java/lang/Math.html#atan2%28double,%20double%29
http://www.ecma-international.org/ecma-262/5.1/#sec-15.8.2.5
http://port70.net/~nsz/c/c99/n1256.html#F.9.1.4
http://msdn.microsoft.com/en-us/library/system.math.atan2.aspx

---Files--------------------------------
f36b9cd63c8218d17a4ddf346a88b9d64a62f557.diff (1.58 KB)


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