桜、抹茶、白、日記

名古屋市在住のC++使いのcoderの日記だったもの。

浮動小数点例外2

d:id:youandi:20070921#p6
VC++ 7.1, 8.0, 9.0で動作するプログラムで、_control87()関数で浮動小数点例外を有効にしているにも関わらず、VC++ 7.1の環境でのみゼロ割等が発生しても浮動小数点例外されなくて悩む。
結局の所、VC++のコード生成オプションの、拡張命令セットを有効にするでSSE2を有効にしている事が原因だった。VC++ 8.0以降であればどうやら_control87()関数でもSSE2の例外マスクを設定してくれているようです。

Dealing with Floating-point Exceptions in MSVC7\8
http://www.devx.com/cplus/Article/34993/1954

VC++ 7.1の環境は、上記サイトのアセンブラによるSSE2例外マスク設定処理を拝借して、例外が発生するようになったのを確認。