From: KUBO Takehiro Date: 2010-08-22T17:59:39+09:00 Subject: [ruby-dev:42090] Math::atan2(0, 0) on ruby 1.9.2 久保です。 ruby 1.9.2 では Math::atan2(0, 0) が例外を上げるように変更されています が、元に戻したほうが良くありませんか? 以下、説明。 1.9.1 以前では Math::atan2(0, 0) は引数の符号によって、以下のような値 を戻していました。(Linux & Windows で試験) Math::atan2(+0.0, +0.0) -> +0.0 Math::atan2(+0.0, -0.0) -> +Math::PI Math::atan2(-0.0, +0.0) -> -0.0 Math::atan2(-0.0, -0.0) -> -Math::PI 1.9.2 では r26785 の変更で Math::DomainError 例外を上げるように変更さ れていました。 英語版 Wikipadia の atan2 を見たところ、atan2(0, 0) の戻り値は undefined で、Single UNIX Specification version 2 の atan2 の定義には If both arguments are 0.0, an implementation-dependent value is returned and errno may be set to [EDOM]. (http://opengroup.org/onlinepubs/007908775/xsh/atan2.htmlより引用) と書かれているので、この記述に従うと例外を上げるのもありかなとは思った けど、2004年版の Single UNIX Specification version 3 では、 (2001年版はみつからなかった...) If y is ±0 and x is -0, ±π shall be returned. If y is ±0 and x is +0, ±0 shall be returned. (http://www.opengroup.org/onlinepubs/000095399/functions/atan2.htmlより引用) と変更されていた。上記の Windows & Linux での試験結果はこの記述に従っ たのだと思われる。 最近のシステムでは atan2(0, 0) の戻り値が実装依存ではなくなってきてお り、また、"errno may be set to [EDOM]." という記述も消えているので、 Math::atan2(0, 0) で引数が両方とも 0 ならば Math::DomainError を上げる というのは止めたほうが良いと思うのですが、どうでしょうか? 1.9.2 にしたらいきなり例外が上がるようになりびっくりしたもので...。