From: ARIMA Yasuhiro Date: 2000-04-18T13:49:52+09:00 Subject: [ruby-dev:9582] Re: SIGFPE isn't raised on FreeBSD 4.0 有馬です。 gotoken@math.sci.hokudai.ac.jp (GOTO Kentaro) wrote | numeric.c には FreeBSD で SIGFPE を起こさないための ifdef が | 入ってます.まぁ現状でも問題は無いですが,FreeBSD 4.0 で | fpsetmask() するのは無駄であることは確かです.しかし FreeBSD | のバージョンによって ifdef するのもまた煩わしいですね.どう | しますか?? FreeBSD のしくみとしては、以下のように括ればよいはずです。 まだ 3.x が主流なので Ruby 側で対処してもらえるとありがたいです。 #if __FreeBSD_version < 400012 # include #endif #if __FreeBSD_version < 400012 /* allow divide by zero -- Inf */ fpsetmask(fpgetmask() & ~(FP_X_DZ|FP_X_INV|FP_X_OFL)); #endif 上記の数値は fpsetmask 対処のタイミングとしては正確でないと思いますが、 これから 4.x 系を使いはじめる方にも、これまで通り 3.x 系を使う方にも 問題ない指定だと考えます。いかがでしょうか? 参考 http://www.jp.FreeBSD.org/www.FreeBSD.org/ja/handbook/ http://www.jp.FreeBSD.org/www.FreeBSD.org/ja/handbook/porting.html -- 有馬 康弘