- 128 名前:デフォルトの名無しさん [2006/06/13(火) 17:10:39 ]
- fenv.hまわりの関数の使いかたが分からないので質問させてください.
環境はLinux 2.6.11,gcc 3.3.5,glibc 2.3.2です. NaNの発生を検出しようと思いまして以下のようなコードを書きました. 例外が発生したところでfpe_handlerを1回呼んで復帰してほしいのですが, 以下のコードではfpe_handlerが何度も呼ばれるようでhogeが無数に表示されます. 例外フラグをクリアする必要があるのかなと思いまして(A)を追加しましたが動作は変わりません. 恐らく根本的に使い方が間違っているのだと思いますが,この辺の資料が少なく分からないでいます. 参考になるコードなどどなたか御存知ないでしょうか? #include <stdio.h> #include <signal.h> #define __USE_GNU/* required for feenableexcept */ #include <fenv.h> /* void print_flags () {printf ("fetestexcept: %x\n", fetestexcept(FE_ALL_EXCEPT));} */ void fpe_handler (int signum) { /* feclearexcept (FE_ALL_EXCEPT); /\* (A) *\/ */ printf ("hoge\n"); } int main () { double d0 = 0; double d1 = 0; double d2 = 0; signal (SIGFPE, &fpe_handler); feenableexcept (FE_INVALID | FE_DIVBYZERO | FE_OVERFLOW); /* 浮動小数点例外トラップするようにする */ d2 = d0 / d1; return 0; }
|

|