Forum: Ruby-core change behavior of Math::atan2 if y and x are both Float::INFINITY

673c801be485a0a326ef2746a94f0d66?d=identicon&s=25 unknown (Guest)
on 2014-05-04 04:15
(Received via mailing list)
Issue #9799 has been updated by cremno phobia.

I've searched for a rationale. It can be found in
< on
the bottom of page 188 (or real page 181):
>The specification of `atan2(∞,∞)` as `π/4` indicates the reasonable quadrant,
preserving some information in preference to none.

Maybe it does make more sense **for Ruby** to raise. I'm not a
mathematician and it also doesn't look useful to me. Also, some
languages I've linked seem to lack a similar exception/error (Go or JS),
but instead of returning NaN, they follow C's Ann. F and return a more
meaningful result instead.

It is mainly curiosity (I've added `Math::DomainError` to mruby)—I don't
have a strong opinion on this.

Feature #9799: change behavior of Math::atan2 if y and x are both

* 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:

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.

f36b9cd63c8218d17a4ddf346a88b9d64a62f557.diff (1.58 KB)
This topic is locked and can not be replied to.