[ruby-core:62310] [ruby-trunk - Bug #9799] [Open] change behavior of Math::atan2 if y and x are both Float::INFINITY

From: cremno@...
Date: 2014-05-03 03:16:11 UTC
List: ruby-core #62310
Issue #9799 has been reported by cremno phobia.

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

* Author: cremno phobia
* Status: Open
* Priority: Normal
* Assignee: 
* Category: 
* Target version: 
* ruby -v: ruby 2.2.0dev (2014-05-03) [x64-mswin64_120]
* Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN
----------------------------------------
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/

In This Thread

Prev Next