成瀬です。

At Mon, 28 Jul 2008 10:24:31 +0900,
Tadashi Saito wrote:
> 
> 斎藤と申します。
> 
> On Mon, 28 Jul 2008 02:56:45 +0900
> Yui NARUSE <redmine / ruby-lang.org> wrote:
> 
> > 現在の Ruby trunk では、FreeBSD 7 において、
> > test/ruby/test_math.rb は以下のように失敗します。
> (snip)
> >   1) Failure:
> > test_atanh(TestMath) [test/ruby/test_math.rb:97]:
> > <[Errno::EDOM, Errno::ERANGE]> exception expected but none was thrown.
> 
> 参考になるか分かりませんが、C99規格(JIS X3010)でも、atanh(1) or atanh(-1) に
> ついては「値域エラーが発生する『ことがある』」としか書いておらず、ERANGEがセットされる
> 保証はないようです。

なるほど。
で、FreeBSDではセットされないケースなのですね。

> >   4) Failure:
> > 例えば、NetBSD4 だと atanh のマニュアルには以下のようにあり、
> > atanh(1) は NaN となります。
> (snip)
> > しかし、FreeBSD7 では以下のようになっており、atanh(1) は infinity を返します。
> 
> テストを見ると、返り値は関係ないと思いますが、どうでしょうか。

あー、これを書いている時点ではMath.atanhの実装が頭にありまして、
そこではCのatanhがerrnoをセットしているか、
NaNだったらErrno::EDOMかErrno::ERANGEを
返すようになっているのですよ。

さておき、Rubyではどこにそろえるのがいいのですかねぇ。
Cの実装をそのまま反映して、例外を投げずにInfinityを返すのでもテストを通すとか?