From: Tadashi Saito Date: 2008-07-28T11:45:34+09:00 Subject: [ruby-dev:35672] Re: [Ruby 1.9 - Bug #368] (Open) 境界における Math.atanh 等の動作 斎藤です。 On Mon, 28 Jul 2008 10:51:39 +0900 "NARUSE, Yui" wrote: > なるほど。 > で、FreeBSDではセットされないケースなのですね。 そのようです。 > > テストを見ると、返り値は関係ないと思いますが、どうでしょうか。 > > あー、これを書いている時点ではMath.atanhの実装が頭にありまして、 > そこではCのatanhがerrnoをセットしているか、 > NaNだったらErrno::EDOMかErrno::ERANGEを > 返すようになっているのですよ。 なるほど、なるほど。 > さておき、Rubyではどこにそろえるのがいいのですかねぇ。 > Cの実装をそのまま反映して、例外を投げずにInfinityを返すのでもテストを通すとか? 気を取り直してSUSv3を見たのですが、atanh(x)の項には > If x is ±1, a pole error shall occur, (...) とあるので、「errnoを設定しないFreeBSD 7の振る舞いが例外的である」として > Errno::EDOMかErrno::ERANGEを返す という実装に(Ruby側が)する方が良いのではないでしょうか。 log*(0)についても、同様の記述で > If x is ±0, a pole error shall occur でした。ので、やはりRuby側が頑張るのが望ましいのではないかと思います。 -- 斎藤ただし