From: nobu.nakada@... Date: 2000-04-18T15:20:42+09:00 Subject: [ruby-dev:9587] Re: SIGFPE isn't raised on FreeBSD 4.0 なかだです。 At Tue, 18 Apr 2000 14:10:13 +0900, EGUCHI Osamu wrote: > > #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 系を使う方にも > > 問題ない指定だと考えます。いかがでしょうか? > > FreeBSD 以外のプラットホームのために、、 > > #if defined __FreeBSD_version && __FreeBSD_version < 400012 > > である必要がありますね。 > > あと有馬さん自身言及されていますが、 400012 とは > タイミングがずれるのが難点ですね。 > > configure で対応すべきでしょうか? [ruby-list:21974] もこれと関係するとしたら、プラットホーム依存のマク ロがぞろぞろ並んでしまいそうなので、やっぱ configure じゃないですか。 Linux gcc 2.95.1、Cygwin gcc 2.95.2、VC++ 4.0 ではうまくいったという かエラーにならないので、div 0 がエラーになる環境でこれでいいものかどう か分かりませんが。 AC_CACHE_CHECK(whether division by 0 is allowed, rb_cv_div0_allowed, [AC_TRY_RUN([ double divide(x, y) double x, y; { return x / y; } int main() { divide(1.0, 0.0); return 0; } ], rb_cv_div0_allowed=yes, rb_cv_div0_allowed=no, rb_cv_div0_allowed=yes)]) if test "$rb_cv_div0_allowed" = yes; then AC_DEFINE(DIV0_ALLOWED) fi --- numeric.c Tue Mar 7 23:19:35 2000 +++ numeric.c Tue Apr 18 15:19:32 2000 @@ -14,5 +14,5 @@ #include #include -#ifdef __FreeBSD__ +#ifndef DIV0_ALLOWED #include #endif @@ -1452,5 +1452,5 @@ void Init_Numeric() { -#ifdef __FreeBSD__ +#ifndef DIV0_ALLOWED /* allow divide by zero -- Inf */ fpsetmask(fpgetmask() & ~(FP_X_DZ|FP_X_INV|FP_X_OFL)); -- そうだ 強気に ちょっと インチキに☆彡 中田 "Bugるくらいがちょうどいいかも;-)" 伸悦