FPEエラーをキャッチするためのシグナルハンドラーを作成しました。これが起こっても実行を継続する必要があります。パラメータとしてucontext_tを受け取り、不良オペランドを0から別の値に変更できますが、FPUコンテキストは依然として不良であり、無限ループに陥りますか?
Linuxで誰かがすでにucontext_t構造を操作していますか?
私はついに、次のようにucontext_tのステータスフラグをクリアすることで、これらの状況を処理する方法を見つけました。
...
const long int cFPUStatusFlag = 0x3F;
aContext->uc_mcontext.fpregs->sw &= ~cFPUStatusFlag;
...
0x3Fは、FPU(x87)のステータスレジスタの6ビットに0を入れるために否定されます。これを行うことは、計算後にFPE例外をチェックすることを意味します。