[#9581] SIGFPE isn't raised on FreeBSD 4.0 — gotoken@... (GOTO Kentaro)

ごとけんです

18 messages 2000/04/18
[#9582] Re: SIGFPE isn't raised on FreeBSD 4.0 — ARIMA Yasuhiro <fit0298@...> 2000/04/18

有馬です。

[#9583] Re: SIGFPE isn't raised on FreeBSD 4.0 — EGUCHI Osamu <eguchi@...> 2000/04/18

えぐち@エスアンドイー です。

[ruby-dev:9582] Re: SIGFPE isn't raised on FreeBSD 4.0

From: ARIMA Yasuhiro <fit0298@...>
Date: 2000-04-18 04:49:52 UTC
List: ruby-dev #9582
有馬です。

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 <floatingpoint.h>
  #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

--
 有馬 康弘 <fit0298@fitec.co.jp>

In This Thread