斎藤です。

On Mon, 28 Jul 2008 10:51:39 +0900
"NARUSE, Yui" <naruse / airemix.jp> 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側が頑張るのが望ましいのではないかと思います。

--
斎藤ただし