[#9569] Re: [ruby-ext:01030] Re: gnome-ruby package — Hiroshi IGARASHI <igarashi@...>
いがらしです。
5 messages
2000/04/14
[#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
えぐち@エスアンドイー です。
[#9587] Re: SIGFPE isn't raised on FreeBSD 4.0
— nobu.nakada@...
2000/04/18
なかだです。
[#9588] Re: SIGFPE isn't raised on FreeBSD 4.0
— matz@... (Yukihiro Matsumoto)
2000/04/18
まつもと ゆきひろです
[#9589] Re: SIGFPE isn't raised on FreeBSD 4.0
— nobu.nakada@...
2000/04/18
なかだです。
[#9590] Re: SIGFPE isn't raised on FreeBSD 4.0
— matz@... (Yukihiro Matsumoto)
2000/04/18
まつもと ゆきひろです
[#9591] Re: SIGFPE isn't raised on FreeBSD 4.0
— nobu.nakada@...
2000/04/18
なかだです。
[#9592] Re: SIGFPE isn't raised on FreeBSD 4.0
— matz@... (Yukihiro Matsumoto)
2000/04/18
まつもと ゆきひろです
[#9599] module_eval — Tadayoshi Funaba <tadf@...>
ふなばです。
7 messages
2000/04/20
[ruby-dev:9594] Re: SIGFPE isn't raised on FreeBSD 4.0
From:
ARIMA Yasuhiro <fit0298@...>
Date:
2000-04-18 13:44:18 UTC
List:
ruby-dev #9594
有馬です。
nobu.nakada@nifty.ne.jp wrote
| At Tue, 18 Apr 2000 17:53:52 +0900,
| matz@netlab.co.jp (Yukihiro Matsumoto) wrote:
| > |> ですよね。だとすると、この程度なら__FreeBSD__埋め込みでもか
| > |> えって分かりやすい気がするのは私だけ?
| > |
| > | FreeBSD でもバージョンで違うとか、他の環境も考えなきゃいけないとかだ
| > |と分けてしまった方がいいような気がするんですが。
| >
| > 他の環境も考えねばならんでしょう。バージョンでも違うでしょう。
まず、FreeBSD 固有の問題としてとらえるなら、バージョンの違いで
動作を変えるという対策は有効だと思います。
特に問題がなければ、1.4系、1.5系ともこの対処をお願いします。
#if defined __FreeBSD__ && __FreeBSD__ < 4
# include <floatingpoint.h>
#endif
#if defined __FreeBSD__ && __FreeBSD__ < 4
/* allow divide by zero -- Inf */
fpsetmask(fpgetmask() & ~(FP_X_DZ|FP_X_INV|FP_X_OFL));
#endif
次に問題の本質の方ですが、どうしていいものやらよくわかりません。
| fpsetmask() というのは BSD 系では結構一般的なようなので、Free BSD 限
| 定よりももうちょっと一般的かなと。
ちなみに(ちなんでどうするつもりだ?)手近な SunOS 5.5.1 で
man fpsetmask してみました。以下のものが使えます。
関数
#include <ieeefp.h>
fp_rnd fpgetround(void);
fp_rnd fpsetround(fp_rnd rnd_dir);
fp_except fpgetmask(void);
fp_except fpsetmask(fp_except mask);
fp_except fpgetsticky(void);
fp_except fpsetsticky(fp_except sticky);
FP_X_INV /* invalid operation exception */
FP_X_OFL /* overflow exception */
FP_X_UFL /* underflow exception */
FP_X_DZ /* divide-by-zero exception */
FP_X_IMP /* imprecise (loss of precision) */
FP_RN /* round to nearest representative number */
FP_RP /* round to plus infinity */
FP_RM /* round to minus infinity */
FP_RZ /* round to zero (truncate) */
--
有馬 康弘 <fit0298@fitec.co.jp>