私はgccコンパイラを使用していますので、sse丸めモードをすばやく変更できます。次のコードは、Linuxの下でそれをコンパイルした場合に動作します:MinGW gccはfp丸めモードを設定しました
#include <xmmintrin.h>
unsigned int _mxcsr_up = _MM_MASK_MASK | _MM_ROUND_UP;
unsigned int _mxcsr_down = _MM_MASK_MASK | _MM_ROUND_DOWN;
unsigned int _mxcsr_n = _MM_MASK_MASK;
void round_nearest_mode() {
asm (
"ldmxcsr %0" : : "m" (_mxcsr_n)
);
}
void round_up_mode() {
asm (
"ldmxcsr %0" : : "m" (_mxcsr_up)
);
}
void round_down_mode() {
asm (
"ldmxcsr %0" : : "m" (_mxcsr_down)
);
}
しかし、私はMinGWのを使用して、Windowsの下でそれをコンパイルするときに、丸めモードは変更されません。理由は何ですか?
ホストされている環境の場合は、インラインアセンブリではなく標準ライブラリ(http://en.cppreference.com/w/c/numeric/fenv/feround) – StoryTeller
@StoryTeller私はそのコンテンツを使用することはできません。私は条件 '#if _GLIBCXX_USE_C99_FENV_TR1'は満足していないと思うが、私は理由を知らない。 –
プロジェクトをC99としてビルドします。コンパイラ呼び出しに '-std = c99'を追加します(IDEを使用する場合はプロジェクトオプションでオプションを探します)。 – StoryTeller