From: KUBO Takehiro Date: 2010-08-24T13:44:11+09:00 Subject: [ruby-dev:42121] Re: Math::atan2(0, 0) on ruby 1.9.2 久保です。 2010/8/24 Kenta Murata : >> いっそのこと、Java の仕様を真似するというのもありかもしれない。 > > 何の根拠もなく短絡的に Java に合わせようという考えには賛同できませんし、 > なぜそこで Java *だけ*が出てくるのかも良く分かりません。 根拠としては 2つあります。 * エラーのインターフェイスが真似できる。 SUSv3 は C 言語ベースなので、「errno に EDOM を設定しつつ値を返す」 ということができるけれど、Ruby だと「Error::EDOM 例外を投げつつ値を 返す」ということができない。Java ならば真似できる。 * JRuby 側とも Math の挙動を合わせるやすくなる。 プラットフォームによる動作の違いを解消するために atan2() の挙動が統一 されたわけですが、ここでいうプラットフォームに MRI のみならず JRuby も 含めて考えると、Java と合わせたほうが JRuby 側は助かるでしょう。 JRuby の立場で考えると Java の数学関数と JRuby の数学関数の結果 が違うと困ったことになりそうですし。 とはいっても、無条件に Java に合わせようとは思ってなくて、SUSv3 と Java の仕様をつきあわせてからどうするか決めようと思ってました。 もしも違いがあったら、個別に考えようかと。 > Math.atan2 は数学の関数ですから、できるだけ数学的に考えたいですし、 > 他の言語を参考にするなら Java 以外の言語も見たほうが良いでしょう。 > > Common Lisp [1] と Scheme (R6RS) [2] を調べてみると、次のようになっています: Lisp 系は私の視野からはずれていたので、Common Lisp と Scheme (R6RS) の情報はありがたいです。 Perl や PHP は libm に丸投げだったので参考にできず、参考にできたのは Java (*1)と JavaScript(厳密にはECMA-262)(*2)のみだったので。 *1 http://download-llnw.oracle.com/javase/6/docs/api/java/lang/Math.html *2 http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf