Project

General

Profile

Actions

Feature #9799

closed

change behavior of Math::atan2 if y and x are both Float::INFINITY

Added by cremno (cremno phobia) almost 10 years ago. Updated almost 10 years ago.

Status:
Closed
Assignee:
-
Target version:
-
[ruby-core:62310]

Description

The current behavior when y and x are either negative or positive infinity is:

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

The attached diff changes it to:

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

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0