4

かなりの数の記事で、fistpfloat->integer を高速に変換するための命令を使用することを提案しています。これは、CPU の現在の丸めモードに依存するため、設定する必要があります。

しかし、この丸めモードは、プログラムの実行中に他のプログラムによって変更される可能性がありますか? OSによる?

さらに悪いことに、これは可能なシナリオ (疑似コード) ですか?

set_rounding_mode(ROUND_TRUNCATE);
/* process gets switched out and other process sets the rounding mode to round */
int x = round_with_fistp(0.6);
printf("%d\n", x); // prints 1
4

1 に答える 1

6

プロセスやスレッド間で丸めモードを共有するまともな汎用 OS はありません。スレッドが要求したときにのみ変更する必要があり、変更はそのスレッドに対してのみローカルである必要があります。ただし、一部のライブラリ (特にサードパーティ) がそれを変更し、場合によっては (または常に) 復元に失敗し、回避策の実装を余儀なくされることがあります。

于 2012-04-27T01:01:23.767 に答える