Windowsでfpu例外を処理したいのですが、次のようなものです:
#include <math.h>
#include <fenv.h>
#include <stdio.h>
int main()
{
double b = 0;
int raised;
feclearexcept (FE_ALL_EXCEPT);
b /= 0;
raised = fetestexcept (FE_OVERFLOW | FE_INVALID);
if (raised & FE_OVERFLOW) { printf("over\n");}
if (raised & FE_INVALID) { printf("invalid\n");}
return 0;
}
しかし、窓に。MSDN を読んでみましたが、ドキュメントがまったくわかりません。x86 と amd64 の両方のアーキテクチャで、Visual Studio コンパイラでこれを行いたいと考えています。
私は C++ で例外を翻訳することに興味はありません。実際には、上記の例のように、計算後の FPU の状態を知ることだけで、FPU 例外にも興味がありません。
== 編集 ==
わかりました、実際にはもっと簡単に見えます: _clearfp を使用するだけで十分です:
#include <math.h>
#include <float.h>
#include <stdio.h>
int main()
{
double b = 0;
int raised;
raised = _clearfp();
b /= 0;
raised = _clearfp();
if (raised & SW_INVALID) { printf("invalid\n");}
return 0;
}
例外、SEH、およびその他の移植性のないものを処理するよりもはるかに優れています:)