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;
}