こんなときにしか出てこない首藤です。

> > DEC Alpha (alpha-osf4.0f) + gcc 2.95 で作った、
> > ruby (--enable-shared)でpolynomial.rbをrequireしたら
> > 浮動小数点エラーが生じる問題が発生しています。

柳川さん wrote:

> たとえば前の FreeBSD では浮動小数点演算例外の扱いが Linux なんかとは違っ
> ていて,

> それで挙動をあわせるために
>
>     #ifdef __FreeBSD__
>         /* allow divide by zero -- Inf */
>         fpsetmask(fpgetmask() & ~(FP_X_DZ|FP_X_INV|FP_X_OFL));
>     #endif
>
> なんていうコードが入っていたりしますが,

FreeBSD では #include <ieeefp.h> することで、
上記 fpsetmask() などが使えるようになると思います。

これが C99 ですと、IEEE 754 (IEC 559, IEC 60559) 的例外、丸めの
制御のためにfenv.h というヘッダが用意されます。
将来的にはこの fenv.h を使うのがまっとうな方法だと思います。

僕の手もとの glibc 2.1.3 にはすでにこのヘッダがあります。
fpgetexceptflag(), fpsetexceptflag(), fpgetround(), fpsetround() などの
プロトタイプ宣言が見えます。


P. J. Plauger による C99 の説明記事 (の和訳) のために、
C Magazine 4月号を買いました。
いまや、すでに、標準 C、ISO C と言ったら C99 のことなので、
「C言語では // から行末がコメントになる」が正しかったりしちゃうんですよねー

SHUDO Kazuyuki/首藤一幸   私をたばねないで あらせいとうの花のように
  shudoh / muraoka.info.waseda.ac.jp