[#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:9589] Re: SIGFPE isn't raised on FreeBSD 4.0

From: nobu.nakada@...
Date: 2000-04-18 08:29:17 UTC
List: ruby-dev #9589
なかだです。

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 <math.h>
 #include <stdio.h>
-#ifdef __FreeBSD__
+#ifndef DIV0_ALLOWED
+#ifdef HAVE_FLOATINGPOINT_H
 #include <floatingpoint.h>
 #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るくらいがちょうどいいかも;-)" 伸悦

In This Thread