From: nobu.nakada@... Date: 2000-04-18T17:29:17+09:00 Subject: [ruby-dev:9589] Re: SIGFPE isn't raised on FreeBSD 4.0 なかだです。 At Tue, 18 Apr 2000 16:09:55 +0900, matz@netlab.co.jp (Yukihiro Matsumoto) wrote: > | [ruby-list:21974] もこれと関係するとしたら、プラットホーム依存のマク > |ロがぞろぞろ並んでしまいそうなので、やっぱ configure じゃないですか。 > > うーん、configureということには基本的には賛成なのですが、 > > !DIV0_ALLOWED > > な環境では常に > > | fpsetmask(fpgetmask() & ~(FP_X_DZ|FP_X_INV|FP_X_OFL)); > > が有効なものなんですか? すいません。もちろんそうは問屋が卸しっこないので(^^;、こんなもんでしょ うか。Free BSD 以外の環境だと fpsetmask() 相当の関数って何があるんでしょ う? 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) else AC_CHECK_HEADERS(floatingpoint.h) AC_CHECK_FUNCS(fpsetmask) fi --- .../numeric.c Tue Mar 7 23:19:35 2000 +++ numeric.c Tue Apr 18 17:19:38 2000 @@ -13,9 +13,11 @@ #include "ruby.h" #include #include -#ifdef __FreeBSD__ +#ifndef DIV0_ALLOWED +#ifdef HAVE_FLOATINGPOINT_H #include #endif +#endif /* !DIV0_ALLOWED */ static ID coerce; static ID to_i; @@ -1451,10 +1453,12 @@ fix_zero_p(num) void Init_Numeric() { -#ifdef __FreeBSD__ +#ifndef DIV0_ALLOWED +#ifdef HAVE_FPSETMASK /* allow divide by zero -- Inf */ fpsetmask(fpgetmask() & ~(FP_X_DZ|FP_X_INV|FP_X_OFL)); #endif +#endif /* !DIV0_ALLOWED */ coerce = rb_intern("coerce"); to_i = rb_intern("to_i"); -- そうだ 強気に ちょっと インチキに☆彡 中田 "Bugるくらいがちょうどいいかも;-)" 伸悦